我很难让这个脚本运行起来。它基本上是一个简单的ajax调用,用于从php中检索返回JSON代码的数据。
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){但它也没有用。我也尝试将我的URL中的所有数据发送到 data 属性的对面,它在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"}}
这让我感到非常困惑,因为我曾经认为Undefined错误可能只是因为某些东西因为某种原因没有在IE中被发回而发生,但很明显:事实并非如此。我得到了我的JSON。只有IE出于某种未知原因仍然认为数据未定义。
答案 0 :(得分:4)
好的,我终于找到了解决方案。 基本上是:
}).done(function ( data ) {
代替success: function (data) {
这就是全部。突然间它开始起作用了。这很奇怪。看起来像猎枪战术(随机改变代码直到它起作用)实际上是解决问题的有效方法。呵呵呵
答案 1 :(得分:0)
我有一个类似的json调用,它返回如下所示的数据:
{“GetTombstoneDataRestResult”:{“AlphaSort”:“Arai Junichi”,“分类”:“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) {
答案 2 :(得分:0)
您的JSON中有一个名为​
的角色
请在此处查看说明:
What's HTML character code 8203?
就在你的冒号前"time":
您可以清理输出并验证JSON并重试吗?