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

时间:2011-09-07 23:49:12

标签: javascript jquery json jquery-ui firefox

求助:

问题在于Firefox 6.0.2安全性。 我更改了我的网址请求: http://mysite.com/ajax/request to / ajax / request 和它的工作。

如果您需要使用跨域,则需要使用jsonp作为数据类型。

非常感谢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] + "<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文档。

接头: 响应标题 Date Wed,07 Sep 2011 23:58:42 GMT 服务器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,必须重新验证 Pragma no-cache 内容长度29 连接关闭 Content-Type application / 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 连接保持活着 Content-Type application / x-www-form-urlencoded;字符集= UTF-8 X-Requested-With XMLHttpRequest 参考者http://mysite.com/v2/user/register 内容长度8 Cookie city =纽约; __utma = 100174657.1435105779.1308773648.1314994226.1315368765.113; __utmz = 100174657.1315368765.113.98.utmcsr = mysite.com | utmccn =(引荐)| utmcmd =转诊| utmcct =

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

在同一台机器上使用chrome可以正常工作,但不能使用firefox和safari。

1 个答案:

答案 0 :(得分:2)

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

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

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

这是正确的json。

e.g。这不是:

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

这也是错误的:

{foo: 1, bar: "foobar"}

您对javascript代码的一些建议:

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

这不正确,将您的密钥包装在引号中。        返回{                     “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] + "<br>";
            $("#console").after(s); console.log(s)
        }
    }