Javascript 为什么我的代码在Safari或Opera中不起作用?
Javascript 为什么我的代码在Safari或Opera中不起作用?,javascript,jquery,google-chrome,safari,opera,Javascript,Jquery,Google Chrome,Safari,Opera,js中有一个函数,用于向表显示消息(消息存储在json中)。在Google Chrome中,它可以工作,但Safari、Opera或Microsoft Edge-不! 与调用setTimeout(callback,5000)相关的代码中有一个错误(没有向回调发送任何内容)。因此,For(var i=0;i由于callback要求将数组作为参数传递,setTimeout必须确保在调用callback时传递数组 改变 setTimeout(回调,5000); 到 setTimeout(函数(){ca
js
中有一个函数,用于向表显示消息(消息存储在json
中)。在Google Chrome中,它可以工作,但Safari、Opera或Microsoft Edge-不!
与调用
setTimeout(callback,5000)
相关的代码中有一个错误(没有向回调发送任何内容)。因此,For(var i=0;i由于callback
要求将数组作为参数传递,setTimeout
必须确保在调用callback
时传递数组
改变
setTimeout(回调,5000);
到
setTimeout(函数(){callback(respond)},5000);
它允许使用参数调用回调函数,作为将由setTimeout
调用的匿名函数体
另外,作为旁注,如果使用respond.forEach()
而不是循环的计数,则代码会更干净:
respond.forEach(function(data) {
if (exists.indexOf(data.id) != -1) continue;
var timeInMessage = data.time * 1000;
var diff_time = (timeNow - timeInMessage);
if (diff_time <= 3600000) {
var rowClone = $('.mess_hide').clone().removeClass('mess_hide');
var newDate = new Date(timeInMessage);
var dateArray = [newDate.getHours(), newDate.getMinutes(), newDate.getSeconds()]
var res = dateArray.map(function(x) {
return x < 10 ? "0" + x : x;
}).join(":");
$('#messages').append(rowClone);
$('.time', rowClone).html(res);
$('.name', rowClone).html(data.user);
$('.message', rowClone).html(smile(data.message));
$('.scroller').scrollTop($('#messages').height());
exists.push(data.id);
}
});
respond.forEach(函数(数据){
如果(exists.indexOf(data.id)!=-1)继续;
var timeInMessage=data.time*1000;
var diff_time=(timeNow-timeInMessage);
如果(不同时间)
由于假定变量存在
-array,但数组([]
)的值仅在调用$.getJSON(…)
之后才分配给它。因此,当第一次调用回调
时,值[]没有设置为存在
。我们只需要将变量存在
移到回调的第一个调用上方。
当计时器调用callback
时,不会向其传递任何信息。但是计时器需要重新读取文件中的消息并在屏幕上显示它们。因此,取而代之的是setTimeout(function(){callback(respond)},5000);
我们需要setTimeout(function(){$.getJSON('data/messages.json',callback);},5000);
var exists=[];
$.getJSON('data/messages.json',回调);
函数回调(响应){
var timeNow=Date.now();
对于(变量i=0;i 如果(不同时间我介绍了您的编辑,但是现在代码已经停止显示消息。虽然没有错误),但是respond
的值应该来自哪里?在问题代码的当前状态下,setTimeout()
传递respond
,但它没有在任何地方定义。(看起来它应该是从一个$.getJSON()
调用中返回的,所以我不确定超时是怎么回事。@尖刻的是,但如果没有出现,又有什么错呢?你能为任何一个不熟练的人解释一下你的答案吗,只要说你添加了一个超时以及为什么。@MartinBarker是的。看看新的答案。