如何通过JS中的AJAX将长字符串发送到PHP

时间:2018-12-19 18:55:19

标签: javascript php ajax string transfer

我正在尝试创建类似帖子的系统,该系统可以允许用户在每个帖子中编写任意数量的内容。但是我在通过AJAX传递长字符串方面遇到了问题。它总是说(链接的长度太大),所以我试图将我的字符串分成几个段,然后一一传输,然后将它们写入文本文件(我不想使用数据库来存储用户将使用PHP(fopen)函数(带有(a)标志)继续编写,如下所示

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);

3 个答案:

答案 0 :(得分:0)

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

  

如果您将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);
}

HereXMLHttpRequest.send()的API规范。

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

答案 1 :(得分:0)

@Alexandros Bantzos我尝试了您的代码,并进行了一些细微的调整使其正常工作。 我不知道为什么,但是对我有用...

if (isset($_REQUEST['t'])) {
    $t = $_REQUEST['t']; // This is your variable with the t param you passed with AJAX
}

我希望这至少可以帮助某人... (不幸的是,我还没有发表评论-不知道他们为什么要这么做)

答案 2 :(得分:-1)

您的代码错误。请改用此代码!

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

您的PHP应该是这样的:

if (isset($_POST['t']))
{
   $t = $_POST['t']; // This is your variable with the t param you passed with AJAX
}