我很遗憾为什么Javascript以这种方式做某些事情,或者我编写错误的东西。但是,在回调完成之前,$ .getJSON之后的代码怎么会被执行?
window.ratingCallback = function(data){
if(data[0].code == 3){
ratingHTML = buildHTML(0);
console.log('a'+ratingHTML);
return;
}
ratingHTML = buildHTML(data[0].rating);
console.log('b'+ratingHTML);
return;
};
function buildHTML(pageRating){
for(counter = 1; counter <= 5; counter++){
if(counter == pageRating){
ratingHTML += '<input name="star1" type="radio" class="star" value="'+counter+'" checked="checked"/>';
} else {
ratingHTML += '<input name="star1" type="radio" class="star" value="'+counter+'"/>';
}
}
return ratingHTML;
}
$.getJSON("https://domain.com/"+data+"?jsoncallback=?");
console.log(ratingHTML+"WHY DOES THIS EXECUTE FIRST AND NOT AFTER THE CALLBACK SINCE IT IS PLACED AFTER getJSON????");
我希望它与众不同的原因是我需要将ratingHTML作为全局变量。
我知道当远程服务器给出响应时会调用回调,但是我可以让其余的脚本等待进一步执行吗?不将所有代码放在回调函数或任何函数中?
非常感谢!
冰
答案 0 :(得分:7)
答案 1 :(得分:4)
getJSON是一个异步方法,它基本上意味着当你调用它时,它会立即返回主程序流。所以这是“非阻塞”。如果要在getJSON完成后进行日志记录,则应将console.log放入回调方法中。或者,如果您不想遵循回调模式并且希望调用是同步的,请使用ajax调用并将async选项设置为false。但请注意,这会导致浏览器阻止,或者在获取数据时显示为冻结。
答案 2 :(得分:3)
AJAX请求通常是异步完成的(AJAX中的第一个A)。这意味着请求将开始,然后它将继续执行它正在执行的代码,而不等待请求返回。
如果您希望它等待,您可以将请求设置为同步模式,但我不确定如何在jquery中执行此操作。