使用Ajax发布表单数据但是发布数据会在服务器上被截断

时间:2013-01-29 16:54:26

标签: php forms jquery post

我发送带有2k +参数的表单数据,但服务器只收到不到一半的数据。

$.ajax({
    url: 'inner.php?option=param',
    type: 'POST',
    data: $('#form').serialize(),
    dataType: "text",
    success: function(data) {
        //success action
    },
    error:function (xhr, ajaxOptions){
        //error action
    }  
});

一些参数由Ajax发布 -

1190583_1306134[]   1
1226739_1343934[]   

我的应用程序是用PHP编写的。提前谢谢。

4 个答案:

答案 0 :(得分:1)

我认为你不需要发布空元素

替换数据:$('#form').serialize()

数据:$('#form :input[value!='']').serialize()

希望它适合你。

答案 1 :(得分:1)

我遇到了同样的问题。我不知道为什么,但$ .ajax trucantes将数据传递为字符串。

要解决此问题,请改为使用对象数据。

例如

$data=$('form').serialize();
$data=JSON.parse('{"' + decodeURI($data.replace(/&/g, "\",\"").replace(/=/g,"\":\"")) + '"}');
$.ajax({
       url:$url,
       data:$data,
       ...
});

希望这会有所帮助;)

答案 2 :(得分:0)

在完全相同的事情上浪费了2小时 - 在php后端部分$ _POST数据(~~ 3500中的~1000)。

在apache日志中找到它:

Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0, referer: http://app1.local/full_path

这足以在php.ini中取消注释max_input_vars,将其更改为10000并重新启动apache。之后一切都恢复了工作;)

答案 3 :(得分:0)

对于在 Firefox 调试器控制台上通过 data: new FormData(this) 使用直接表单提取时发现错误请求已被截断的任何人 em>,整个数据可能实际上已经发布,错误似乎是错误的。我不得不花了几个小时才意识到 Google Chrome 没有报告错误,并且在实际检查发布的图片时,它实际上是在上传。

顺便说一下,这样的直接表单提取不需要序列化,甚至可以上传图像。