我正在尝试创建类似帖子的系统,该系统可以允许用户在每个帖子中编写任意数量的内容。但是我在通过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);
答案 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);
}
Here是XMLHttpRequest.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
}