我通过 API 从两个不同的 Google 图书书架获取图书信息,并尝试将其放入我的自定义 HTML 中,但并非所有内容都显示,这似乎是因为我的函数按顺序触发,即使我有它们按照我想要的顺序排列,一切都在 $ready 中。我需要以某种方式使用回调吗?
这是我的小提琴:http: //jsfiddle.net/bbrLv/
这是控制台的截图,显示了乱序触发的步骤:http: //min.us/mQ0LNVYYT
我通过 API 从两个不同的 Google 图书书架获取图书信息,并尝试将其放入我的自定义 HTML 中,但并非所有内容都显示,这似乎是因为我的函数按顺序触发,即使我有它们按照我想要的顺序排列,一切都在 $ready 中。我需要以某种方式使用回调吗?
这是我的小提琴:http: //jsfiddle.net/bbrLv/
这是控制台的截图,显示了乱序触发的步骤:http: //min.us/mQ0LNVYYT
$.getJSON()作为$.ajax
jQuery 的 -based 函数之一,实现了强大的 Promise 接口。这意味着您实际上可以通过以下方式将这些调用与$.then()方法链接起来:
$.getJSON(myquery, function(data) {
...
}).then(function() {
$.getJSON(myquery2, function(data) {
...
}
});
更新:这是一个更新的小提琴。我必须在那里快速破解:pubdateFixer 函数。您已将其放入$(function(){})
第二个 getJSON 处理程序中,但这是不正确的:该函数应在 getJSON 内容到达后准确触发,而不是在初始页面加载时触发。
您正在调用异步函数。
您根本无法预测来自服务器的响应以及您的回调将被调用的顺序(是的,您尚未使用回调,因为$.getJSON
将回调作为最后一个参数)。
因此,如果您需要确保响应处理的特定顺序,您需要使用 jquery then函数(首先由 raina77ow 引用)来链接调用,或者添加另一种保护机制,例如每个响应的布尔值和一些确保您按所需顺序执行操作的代码行。
例如 :
function bigOperationNeedingBothAnswers() {
}
var answersStillNotArrived=2;
$.getJSON(firstQuery, function (data) {
// some things
if (--answersStillNotArrived==0) bigOperationNeedingBothAnswers();
}
$.getJSON(otherQuery, function (data) {
// some things
if (--answersStillNotArrived==0) bigOperationNeedingBothAnswers();
}