javascript - 当 URI 的字符超过 5,000 时,如何设置和发送 GET 数据
问题描述
我正在使用 Laravel 刀片。
当 textarea 的项目大小很大时,我的下面的代码会发生错误。我正在寻找一种方法来解决它。
每个人。我应该如何向服务器发送大量文本?我应该如何修改我的代码?
刀片(JavaScript)
function sendByGet()
{
var items = document.getElementById("item").value;
var param = "?items="+items+"&id={{$id}}";
var url = {{(url)}} + encodeURI(param);
let result = fetch(url);
result.then(response => response.json()).then(
responceObject =>{
}
}
}
控制器 PHP
public function receivebyGet(Request $request)
{
$lineArray = array();
$slipData = explode("\n", $request->items);
错误
日期替换 <huge_text> (实际数据为文本(5000 个字符))
phpbladeName?id=01:270 GET https://test.com/test/send_by_get?&item= <huge_text> 414 sendByGet@confirmation?id=01:270 onclick@confirmation?id=0:244 VM142:1 未捕获(在promise) SyntaxError: phpbladeName 处的 JSON 输入意外结束?id=01
解决方案
将数据移动到 BODY
function sendByGet(url) {
const items = document.getElementById("item").value;
const param = encodeURI("?id={{$id}}");
fetch(url + param, {
method: 'GET',
headers: { 'Content-Type': 'plain/text' },
body: items,
})
.then(response => response.json())
.then( ... );
}
PHP 控制器(假设是 Laravel)
public function receivebyGet(Request $request) {
$lineArray = array();
$slipData = explode("\n", $request->getContent());
...
}
查询大小限制
正如Peter Krebs所述,最大 URL 大小(包括查询)为 2000 个字符。url
因此,如果超过 2000 年,您不能期望您的系统能够可靠地工作。在此处阅读更多信息。
获取正文
正如Jabaa所指出的,您应该从语义上选择方法,而不是技术上。但这是随着时间的推移而演变的(最初 GET 主体应该被拒绝/忽略)在此处阅读更多内容。因此,您应该仔细考虑并验证所有相关方(服务器、浏览器、代理、缓存)是否正确支持它。这就是为什么开发人员经常选择违反语义并使用POST
方法的原因。
推荐阅读
- java - 为什么这个 AspectJ 方法签名表达式匹配子类型中被覆盖的方法?
- javascript - 如何在 React 中动态更改按钮的大小和颜色
- opencv - 给定图像帧中对象的坐标,查找图像中对象的深度
- php - Laravel 在编辑路线上返回 404 (Laravel 6.11.0)
- javascript - 具有公共静态属性的函数对象
- nginx - 允许访问网络管理员 Nginx
- scala - SBT 无法在基本项目中解决对其正确路径的任何依赖关系
- chatbot - 在 BLiP 中,一条调度消息有效,但同时多条消息无效
- webfonts - 如何使用 Webpack Encore 和 webfonts-loader 预加载字体?
- c# - 伪控制台 (ConPTY) 的输出被 Visual Studio 调试输出窗口吃掉