【发布时间】:2010-12-05 09:55:24
【问题描述】:
使用 jquery,我可以使用 ajax 将 json 对象从客户端发送到服务器,如下所示:
var strJSON = '{"event":[{
"dates":[
"2009-10-14","2009-10-15"],
"teams":[
{"id":"0","country":"USA","state":"CA","name":"California Polytechnic State University","subteam":""},
{"id":"1","country":"USA","state":"CA","name":"California State University, Bakersfield","subteam":""},
{"id":"2","country":"USA","state":"CA","name":"California State University, Fresno","subteam":""},
{"id":"3","country":"USA","state":"CA","name":"California State University, Fullerton","subteam":""}]
}]}';
$.ajax({
url: '../ajax/save_event',
type: 'POST',
data: { data : strJSON },
dataType: 'json',
timeout: 8000,
cache: false
});
效果很好。但是如果 JSON 字符串变得更大(不确定确切的大小,但大约大 5 倍),服务器接收到的 $_POST 数据是空的。有人知道为什么吗?
我正在使用 Apache/PHP/jquery。它发生在 IE 和 Firefox 中。是否有需要调整的配置设置?
这是一个无法通过的字符串示例:
{"events":[{"dates":["2009-10-10","2009-10-11","2009-10-12"],"divisions":[{"level":"Collegiate","name":"Varsity","subdivision":"Division I","rounds":[],"teams":[{"id":"0","country":"USA","state":"CA","name":"California Polytechnic State University","subteam":""},{"id":"1","country":"USA","state":"CA","name":"California State University, Bakersfield","subteam":""},{"id":"2","country":"USA","state":"CA","name":"California State University, Fresno","subteam":""},{"id":"3","country":"USA","state":"CA","name":"California State University, Fullerton","subteam":""},{"id":"4","country":"USA","state":"CA","name":"Stanford University","subteam":""},{"id":"5","country":"USA","state":"CA","name":"University of California, Davis","subteam":""},{"id":"6","country":"USA","state":"CA","name":"San Francisco State University","subteam":""},{"id":"7","country":"USA","state":"CA","name":"Lassen Community College","subteam":""},{"id":"8","country":"USA","state":"CA","name":"Menlo College","subteam":""},{"id":"9","country":"USA","state":"CA","name":"Fresno Pacific University","subteam":""},{"id":"10","country":"USA","state":"CA","name":"Bakersfield","subteam":""},{"id":"11","country":"USA","state":"CA","name":"Buchanan","subteam":""},{"id":"12","country":"USA","state":"CA","name":"Campolindo-Moraga","subteam":""},{"id":"13","country":"USA","state":"CA","name":"Fremont-Sunnyvale","subteam":""},{"id":"14","country":"USA","state":"CA","name":"Ponderosa-Shingle Springs","subteam":""},{"id":"15","country":"USA","state":"CA","name":"West Covina","subteam":""},{"id":"16","country":"USA","state":"CA","name":"Gilroy","subteam":""},{"id":"17","country":"USA","state":"CA","name":"San José State University","subteam":""},{"id":"18","country":"USA","state":"CA","name":"University of California, Los Angeles","subteam":""},{"id":"19","country":"USA","state":"CA","name":"Sierra College","subteam":""},{"id":"20","country":"USA","state":"CA","name":"Selma","subteam":""},{"id":"21","country":"USA","state":"CA","name":"Liberty","subteam":""}],}]}]}
它是使用 json.org 的“stringify”创建的:
var strJSON = JSON.stringify(oEvent);
编辑: 进一步调查后,我将 dataType 更改为“text”并尝试发送一长串数字。它可以工作到大约 3500 个字符然后阻塞(当我说“阻塞”时,我的意思是请求以空 $_POST 到达服务器。)
我的 PHP post_max_size 是 64M,所以不是这样。有人建议使用 httpd.conf 中没有的 Apache 的“LimitRequestBody”,所以我在其中添加了“LimitRequestBody 0”并重新启动了 Apache。这也没有帮助。
还有什么建议???
【问题讨论】:
-
你可以试试让它不是一个字符串开始吗?例如,只需将一个 JavaScript 对象传递给
ajax调用的data参数即可。看看会发生什么。 -
请发布 JSON 失败的示例。比您发布的内容大 5 倍并没有那么大。这可能是您的 JSON 字符串中的转义问题或结构问题。
-
好吧,我只是在上面添加了一个示例。它是用 stringify() 创建的。
-
不不,我的意思是直接将对象传递给
data:,而不是使用任何类型的字符串化。将 jQuery 传递给 Object,它会将其转换为 JSON。如果仍然失败,那可能是 pix0r 所说的,服务器配置问题。 -
@thenduks:jQuery 不会将任何内容序列化为 JSON。如果您传递
.ajax一个对象,您将获得为您生成的标准foo=1&bar=2请求正文/查询。如果 OP 想要 JSON,那么JSON.stringify是要走的路。
标签: php jquery ajax apache json