8

我正在努力让这个脚本工作。它基本上是一个简单的 ajax 调用,用于从返回 JSON 代码的 php 中检索数据。

function refreshWindows(){
if(AjaxPull && AjaxPull.readystate != 4){
    AjaxPull.abort();
}
AjaxPull = $.ajax({
    type: 'POST',
    url: $path,
    data: {
        ajax: true,
        mode: 'update',
        to: Math.round(currentDate.getTime() / 1000),
        from: Math.round(previousDate.getTime() / 1000)
    },
    dataType: "json",
    success: function (data) {
        alert(data); //that's for debug
        $replies = data.Updates;
        $.each($replies ,function(group,value) {
            if (value!=''){
                $("#group"+group+" .content").append(value);
                $("#group"+group+" .content").stop().animate({ scrollTop: $("#group"+group+" .content")[0].scrollHeight }, 800);
                if (!$("#group"+group+" .Window").is(':visible')) {
                    $("#group"+group+" .BottomBox").fadeTo('fast', 0.5).fadeTo('fast', 1.0);
                }
            }
        });
        previousDate = currentDate;
        currentDate = new Date();
        timeController.push( setTimeout(function(){refreshChatWindows();}, 500) );
    }
});

}

我在 Internet Explorer 中遇到的错误是:

SCRIPT5007:无法获取属性“更新”的值:对象为空或未定义

在 Firefox 和 Google Chrome 中一切正常。

最初我的代码是使用.get编写的,但有人建议切换到.ajax - 好吧,它没有帮助。我尝试使用.done(function(data){,但它也没有工作。我还尝试在与data属性相反的 URL 中发送所有数据,它在 FF 中运行良好,但 IE 仍然弹出相同的错误。最后,我尝试向 PHP 添加不同的标头,例如,header('Content-Type: application/json');但它没有改变任何东西。我用完了在stackoverflow上可以解决的想法/可能的解决方案,因此将不胜感激。

在 IE 中,我转到开发人员工具的网络选项卡并尝试查看是否一切正常 - 是的,请求正在正确发送所有数据,并且我收到的响应是正确的 JSON,就像在 Firefox 中一样:

{"Updates":{"1":"","2":"","3":"","5":"","6":"","7":"","8":""},"time":{"from":"1367489761","to":"1367489761"}}

这让我很困惑,因为我认为未定义的错误可能只是因为无论出于何种原因没有在 IE 中发回某些东西,但很明显:事实并非如此。我拿回了我的 JSON。只有 IE 出于某种未知原因仍然认为数据未定义。

4

3 回答 3

4

好的,我终于找到了解决方案。基本上:

  • 删除 PHP 脚本发送的任何标头。特别是:内容类型的标题。(幸运的是 - 似乎仍然可以使用会话)
  • 使用}).done(function ( data ) {代替success: function (data) {

就这样。突然它开始起作用了。这很奇怪。似乎霰弹枪策略(随机更改代码位直到它起作用)实际上是解决问题的有效方法。呵呵呵呵

于 2013-05-16T09:11:13.963 回答
0

​您的 JSON 中有一个称为字符的字符。
在此处查看描述: 什么是 HTML 字符代码 8203?

它就在你的结肠之前"time"​:

您可以清理输出并验证 JSON 并重试吗?

于 2013-05-15T20:22:31.480 回答
0

我有一个类似的 json 调用,它返回如下所示的数据:

{"GetTombstoneDataRestResult":{"AlphaSort":"Arai Junichi","Classification":"A&D 设计对象"...等

换句话说,很像您的 json 数据。为了在 jQuery 中引用它,我使用回调名称。

     $.ajax({
     type: "GET",
     dataType: "jsonp",
     url: url,
     success: function (result) {

     $('#screenshot').append('<p><strong>Title: ' +
     result.GetTombstoneDataRestResult.Title + '</strong><br />Year: ' +
     result.GetTombstoneDataRestResult.Dated + '<br />Artist: ' +
     result.GetTombstoneDataRestResult.DisplayName + '</p>');

     }
     });

看起来你也想试试这个:

var replies = data;
$.each(replies.Updates ,function(group,value) {
于 2013-05-15T15:07:09.220 回答