【问题标题】:JSON return empty response on FireFox & Safari (Windows Vista)JSON 在 FireFox 和 Safari (Windows Vista) 上返回空响应
【发布时间】:2011-11-12 14:12:39
【问题描述】:

已解决:

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

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

非常感谢 evildead


我对服务器的 JSON 请求返回一个空响应。 这只发生在 Firefox 6.0.2 和 Windows Vista 机器上的 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 文档。

标题: 响应标头 日期 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 无缓存,必须重新验证 杂注无缓存 内容长度 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 接受编码 gzip,放气 接受字符集 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=(referral)|utmcmd=referral|utmcct=

标题后响应 JSON 对象 { name="pizza", point=1} [对象 { name="pizza", point=1}]

它可以在同一台机器上与 chrome 一起正常工作,但不能在 firefox 和 safari 上运行。

【问题讨论】:

  • 你能展示你生成 json 的 php 脚本吗?
  • 在你的成功函数中添加一个console.log(data),让我知道输出的结果
  • 我在想什么,看我的回答。您的 json 格式不正确!最后一个响应行末尾的 ] 是有意的吗?
  • 如果你遗漏了 header(...) 会发生什么?
  • 在这里看我的回答太长了。

标签: javascript jquery json jquery-ui firefox


【解决方案1】:

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

所以要 100% 确保您返回如下内容:

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

这是正确的 json。

例如这不是:

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

这也是错误的:

{foo: 1, bar: "foobar"}

对您的 javascript 代码的进一步建议:

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

这是不正确的,请将您的密钥用引号括起来。 返回 { “标签”:项目名称, “值”:item.name }

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

此外,当您想返回时,例如php 中的数组,使用 json_encode($var)

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

对于您的具体用例返回:

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

在您的 php 脚本中。

在你的萤火虫页面上试试这个:

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)
        }
    }

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多