JSON在FireFox和Safari上返回空响应(Windows Vista)

解决了:

问题在于Firefox 6.0.2安全性。 我已将我的URL请求从: http : //mysite.com/ajax/request更改为/ ajax / request及其工作。

如果需要使用跨域,则需要使用jsonp作为dataType。

非常感谢evildead


我对服务器的JSON请求返回一个空响应。 这仅发生在Windows Vista计算机中的Firefox 6.0.2和Safari中。

输出由php脚本生成,并具有json / application标头。

这将返回空响应:

$('#ajaxcall').click(function(){ var ts = new Date().getTime(); var urlz = $('#targeturl').val()+'/'+ts; var dataString = $("#datazz").val(); $.ajax({ type: "POST", url: urlz, data: "data="+dataString, success: function(data){ var obj = jQuery.parseJSON(data); for (var i = 0; i < obj.length; i++) { var object = obj[i]; for (property in object) { var s = property + "=" + object[property] + "
"; $("#console").after(s); } } } }); });

除此之外:

 $( "#tags" ).autocomplete({ source: function( request, response ) { $.post("http://mysite.com/v2/ajax/tag_suggestion/ab", {data:request.term}, function(data){ response($.map(data, function(item) { if ($('#tagsboxvals').hasClass(item.name.split(' ').join('_'))){ return null; } else { return { label: item.name, value: item.name } } })) }, "json"); }, .... }); 

谢谢你的帮助

编辑:这是PHP脚本生成的内容:

 $arr = array( array('name'=>'pizza', 'point'=>'1'), array('name'=>'blt', 'point'=>'1')); header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); echo json_encode($arr); 

这是一个结构良好的JSON文档。

标题:响应标题日期Wed,07 Sep 2011 23:58:42 GMT Server Apache / 2.2.3(CentOS)X-Powered-By PHP / 5.1.6 Expires Mon,26 Jul 1997 05:00:00 GMT Cache-Control no-cache,must-revalidate Pragma no-cache内容长度29连接关闭内容类型应用程序/ json请求标头主机mysite.com用户代理Mozilla / 5.0(Macintosh; Intel Mac OS X 10.7; rv:6.0)Gecko / 20100101 Firefox / 6.0接受application / json,text / javascript, / ; q = 0.01 Accept-Language en-us,en; q = 0.5 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8; q = 0.7,*; q = 0.7 Connection keep-alive Content-Type应用程序/ x-WWW窗体-urlencoded; charset = UTF-8 X-Requested-With XMLHttpRequest Referer http://mysite.com/v2/user/register Content-Length 8 Cookie city = new york; __utma = 100174657.1435105779.1308773648.1314994226.1315368765.113; __utmz = 100174657.1315368765.113.98.utmcsr = mysite.com | utmccn =(引荐)| utmcmd =转诊| utmcct =

标题发布回应JSON对象{name =“pizza”,point = 1} [Object {name =“pizza”,point = 1}]

它在同一台机器上使用chrome工作正常,但不适用于firefox和safari。

你必须确保你的返回值是“真正的”json。 有些浏览器不接受json,这在语法上是不正确的。

因此,请100%确定您返回的内容如下:

 {"foo": 1, "bar": "foobar"} 

这是正确的json。

例如,这不是:

 {'foo': 1, 'bar': "foobar"} 

这也是错的:

 {foo: 1, bar: "foobar"} 

进一步建议您的JavaScript代码:

  return { label: item.name, value: item.name } 

这是不正确的,将您的密钥包装在引号中。 return {“label”:item.name,“value”:item.name}

通常我读过很多次你应该做ajax调用因为GET请求不是POST,因为POST会产生更多的开销和流量。 但不要指责我。

此外,当你想从php中返回例如一个数组时,使用json_encode($ var)

http://php.net/manual/de/function.json-encode.php

对于您的具体用例返回:

 {"name": "pizza", "point": 1} 

从您的PHP脚本中。

在firebug的页面上试试这个:

 var obj = jQuery.parseJSON('[{"name":"pizza","point":1}]'); for (var i = 0; i < obj.length; i++) { var object = obj[i]; for (property in object) { var s = property + "=" + object[property] + "
"; $("#console").after(s); console.log(s) } }