javascript - 如何在 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);
解决方案
据我了解,您的问题在于 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,也许)。
推荐阅读
- firebase - Future Builder 卡在 ConnectionState.waiting
- tms - 从 TMS 到 SAP S/4HANA(入站)的 SAP PO 7.5 接口。IDOC XML 到标准企业服务将通过 2 个新字段得到增强
- rust - 如何在外部使用宏的内部结构?
- javascript - 如何使用相同的按钮/和悬停问题打开和关闭弹出窗口
- android-studio - 如何在 Android Studio 中禁用 DelicateCoroutinesApi 注释?
- reactjs - 每当任何第三方应用程序在 React Native 中使用 mike 时,录音机都会崩溃
- html - 是否有快捷方式在 Visual Studio Code 中快速添加 html 类标签?
- php - 应用程序安装到 shopify 商店时的 API 异常
- linux - 有什么方法可以在 Linux 中查看字体的 PostScript 名称
- security - IBM Cloud Code Engine:为 Container Registry 实施私有端点后,应用程序无法启动