首页 > 解决方案 > 如何在 JS 中通过 AJAX 向 PHP 发送长字符串

问题描述

我正在尝试创建类似帖子系统的东西,它可以让用户在每篇帖子中写多少就写多少。但是我在通过 AJAX 传输长刺时遇到了问题。它总是说(链接的长度太大)所以我试图将我的字符串分成一些段并逐个传输并将它们写入文本文件(我不想使用数据库来存储用户将写入)通过使用带有(a)标志的PHP(fopen)函数继续编写如下

fopen($directory,"a")

另外,我使用 (encodeURIComponent) 与长字符串的每个部分保持(\n,空格,...等),但我得到的结果是这样的

例如我写的

bla bla bla bla bla bla bla 

我得到了什么

bla bla bla SSbla bla bla b

如何解决这个问题呢 ??

我的 JS 代码,其中 (d) 是字符串

function sendDetails(t){
    t = encodeURIComponent(t);
    var x = new XMLHttpRequest();
    x.open("POST","src/writeDetails.php?t="+t,true);
    x.send();
}
function writeDetails(d){
    var r = Math.floor(d.length / 1000);
    var m = d.length % 1000;
    for(i=0;i<r;i++){
        var p = d.slice(i*1000,i*1000+999);
        sendDetails(p);
    }
    if(i > 0){
        sendDetails(d.slice(i*1000,i*1000+m));
    }else{
        sendDetails(d.slice(0,m))
    }
}

我的 PHP 代码

$t = $_REQUEST['t'];
$f = fopen($fileLink,"a");
fwrite($f,$t);
fclose($f);

标签: javascriptphpajaxstringtransfer

解决方案


据我了解,您的问题在于 URI 太长。请参阅与最大 URI 长度相关的这个问题:

如果您将 URL 保持在 2000 个字符以下,它们几乎可以在客户端和服务器软件的任何组合中工作。

要解决此问题,您需要在请求正文中发送数据,而不是 URI 的查询部分:

function sendDetails(t){
    t = encodeURIComponent(t);
    var x = new XMLHttpRequest();
    x.open("POST", "src/writeDetails.php", true);

    var fd = new FormData();
    fd.append("t", t);
    x.send(fd);
}

XMLHttpRequest.send().

请注意,我使用了一个FormData对象作为请求的主体,但您可以选择其他更适合您的方式(例如 JSON,也许)。


推荐阅读