jQuery.post()不能发送太长的查询/序列化数据?

时间:2014-08-19 06:27:49

标签: jquery ajax

我有一个$ .post()尝试发送序列化表单作为数据,但也有一些来自页面的其他变量。其中之一是#designer-window div的HTML代码。这个HTML可以长达数千个字符,在我的例子中是3411个字符。

帖子请求如下所示:

var html = $('#designer-window').html();
var cardid = $('input[name="cardid"]').val();
var id_card = $('input[name="id_card"]').val();

$.post('sv/ajaxadmin/', $('form[name="savecard"]').serialize()+"&html="+html+"&image="+renderedImage+"&cardid="+cardid+"&id_card="+id_card, function(data){
    location.html(original);
    $('form[name="savecard"] button').attr("disabled", false);
    $('form[name="savecard"]').prepend(data);
    console.log(data);
}, "text");

现在,如果我使用console.log(html);在发送之前打印数据。我得到了完整的HTML字符串。但是在我的/ sv / ajaxadmin /中,如果我回显$ _POST [' html'];然后把绳子切掉一半。字符串的结尾缺失。

所以我猜测的是,你可以使用上面的函数发送的字符数或字节数有某种限制,所以整个字符串都不会发送。只是它的一部分。

所以有一些事情:

  • 也许有另一种方法可以在jQuery.post()函数中设置发送数据?显然我可以使用{data:var,data2:var2 ...},这个问题是将它与$(' form')。serialize()结合起来。有可能吗?

  • 任何人都知道是否确实存在限制?我没有找到有关jquery post请求中的字节/字符限制的任何信息。但我能看到的唯一方法是,这个问题的原因是有一个限制。你还有其他想法吗?

编辑: 经过额外的测试后,我注意到它似乎与&字符。所以在HTML中,如果一个字符串包含&这意味着$ .post()数据查询字符串将被切断。我试过逃避/替换&使用&,但它仍然搞砸了查询。那么......问题是如何,我如何逃避并能够在我的查询中发送它们。

已解决:我用encodeURIComponent()包装了我的html变量;逃避它。工作!

2 个答案:

答案 0 :(得分:0)

问题可能不是字符数的限制,而是可以发送多少输入变量的限制(默认为1000)。

php.ini 中添加/更改此内容应该修复它

max_input_vars 2000

  

max_input_vars integer

     

可以接受多少输入变量(限制   分别应用于$ _GET,$ _POST和$ _COOKIE superglobal)。使用   该指令减轻了拒绝服务的可能性   使用哈希冲突的攻击。如果有更多的输入变量   比此指令指定的更多,发出E_WARNING   输入变量将从请求中截断。

http://php.net/manual/en/info.configuration.php#ini.max-input-vars

答案 1 :(得分:0)

它没有奏效的原因是因为我没有逃过我的var html。该变量包含数百个HTML字符,如果其中有一个&符号(&),则意味着我的POST字符串被截断。

我通过使用encodeURIComponent()来解决这个问题,{{3}}会转义所有特殊字符,例如&