使用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个字符左右时会出错(当我说“出错”时,是指请求到达服务器时带有null $_POST)。
我的PHP post_max_size 是64M,所以不是这个问题。有人建议使用Apache的“LimitRequestBody”,但它不在httpd.conf中,所以我添加了“LimitRequestBody 0”并重新启动了Apache。但这也没有帮助。
还有其他建议吗?
ajax
调用的data
参数。看看会发生什么。 - rfundukdata:
而不使用任何字符串化。将对象传递给 jQuery,它会将其转换为 JSON。如果仍然失败,则可能是像 pix0r 说的那样,服务器配置问题。 - rfunduk.ajax
传递一个对象,则会为您生成标准的foo=1&bar=2
请求正文/查询。如果OP想要JSON,则应使用JSON.stringify
。 - Crescent Fresh