Jquery Ajax - post huge string value
Jquery Ajax - post huge string value
我需要POST一个大约3MB大小的巨大字符串,有可能不使用URL参数将其发送到PHP吗?
如果我将其作为URL参数发送,请求将达到URL的大小限制。
如何解决这个问题?有什么线索吗?
非常感谢。
实际上,我是这样做的:
$.ajax({ type:'POST', ....... data:{string:3MB_string} });
我正在使用PHP和jQuery,并且希望将这个3MB的base64字符串发送到一个简单的URL,比如site.com/script.php
这个字符串是一个文件阅读器API的base64图像
这是一个字符串的例子,但这不会达到大小限制,因为在粘贴3MB的内容时会出现问题,http://jsfiddle.net/QSyMc/
Jquery Ajax - post huge string value这个问题的出现原因是由于默认情况下,通过data选项传递给服务器的数据会被处理和转换为查询字符串的形式,适应默认的content-type为"application/x-www-form-urlencoded"。而当需要发送一个DOMDocument或其他非处理过的数据时,需要将processData选项设置为false。
解决方法是在发送POST请求时,将processData选项设置为false,并将要发送的数据转换为字符串形式的JSON。具体的代码如下:
var data = { "some" : "data" }; $.ajax({ type: "POST", url: "/script", processData: false, contentType: 'application/json', data: JSON.stringify(data), success: function(r) { console.log(r); } });
通过将processData选项设置为false,可以阻止jQuery将数据处理为查询字符串形式,而是以原始的形式发送给服务器。同时,设置contentType为'application/json'以确保服务器正确解析接收到的数据。
在这个问题中,某些情况下了使用半JSON半对象的方式来解决问题,但并没有给出具体的解释或原因。
Jquery Ajax - post huge string value的问题出现的原因是发送的数据量太大,超过了服务器允许的请求大小限制。解决方法是使用POST请求,并在服务器端的脚本中获取该值。另外,还需要增加允许的请求大小限制。
首先,我们使用以下代码发送POST请求:
$.ajax({ url: '/script.php', type: 'POST', data: { value: 'some huge string here' }, success: function(result) { alert('the request was successfully sent to the server'); } });
然后,在服务器端的脚本中获取该值:
$_POST["value"]
此外,可能还需要增加允许的请求大小限制。可以在`.htaccess`文件或`php.ini`文件中设置`post_max_size`值,例如:
#设置最大请求大小 php_value post_max_size 20M
如果出现了“you reached request limit”的错误提示,可能需要增加允许的请求大小限制。请提供更多信息,例如发送请求的URL和使用的服务器端语言。
可以通过更新答案来演示如何增加最大允许的请求大小限制。
关于这个问题的答案链接:[php.net/manual/en/ini.core.php#ini.post-max-size](http://www.php.net/manual/en/ini.core.php#ini.post-max-size)
回答者解释了为什么数据不作为URL参数发送。URL是在`open()`方法中发送的,而不是在`send()`方法中发送。当在jQuery中指定`type: 'POST'`时,意味着要将数据作为载荷发送,而不是作为URL参数发送。
如果返回的字符串太大,超过了3MB,可能会导致复制和粘贴操作出现问题。可以通过访问此链接查看从PHP返回的字符串的示例:[jsfiddle.net/QSyMc](http://jsfiddle.net/QSyMc/)。