我有一个$ .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变量;逃避它。工作!
答案 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}}会转义所有特殊字符,例如&
。