首页 > 解决方案 > 当 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

标签: javascriptlaravel

解决方案


将数据移动到 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方法的原因。


推荐阅读