已解决:
问题在于 Firefox 6.0.2 的安全性。 我更改了我的 URL 请求: http://mysite.com/ajax/request 到/ajax/请求 及其工作原理。
如果需要跨域使用,需要使用jsonp作为dataType。
非常感谢 evildead
我对服务器的 JSON 请求返回空响应。 这只发生在 Firefox 6.0.2 和 Windows Vista 机器上的 Safari 中。
输出由 php 脚本生成并具有 json/应用程序 header 。
这将返回空响应:
$('#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] + "<br>";
$("#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 文档。
标题: 响应头 日期 2011 年 9 月 7 日星期三 23:58:42 GMT 服务器 Apache/2.2.3 (CentOS) X-Powered-By PHP/5.1.6 到期日 1997 年 7 月 26 日星期一 05:00:00 GMT Cache-Control 无缓存,必须重新验证 Pragma 无缓存 内容长度 29 连接关闭 内容类型 application/json 请求 header 主机 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 接受语言 en-us,en;q=0.5 接受编码 gzip, deflate 接受字符集 ISO-8859-1,utf-8;q=0.7,*;q=0.7 连接保活 内容类型应用程序/x-www-form-urlencoded;字符集=UTF-8 X-Requested-With XMLHttpRequest 请求 推荐人 http://mysite.com/v2/user/register 内容长度 8 曲奇城=纽约; __utma=100174657.1435105779.1308773648.1314994226.1315368765.113; __utmz=100174657.1315368765.113.98.utmcsr=mysite.com|utmccn=(推荐)|utmcmd=推荐|utmcct=
header 发布响应 JSON 对象 { name="pizza", point=1} [对象 { 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
}
这是不正确的,请将您的 key 用引号引起来。 返回 { “标签”:项目名称, “值”: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] + "<br>";
$("#console").after(s); console.log(s)
}
}
关于javascript - JSON 在 FireFox 和 Safari (Windows Vista) 上返回空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7341716/