当我多次运行 $.ajax 时,它似乎没有等待 ajax 调用完成就继续运行我的代码。 当我使用 jsonp 时,设置“async: false”不起作用(或者我读过)。我必须使用 jsonp 才能访问 Media Wiki api,因此无法更改它。我是 Javascript 的初学者,这是我可以使用“ promise ”的东西吗?
var articleList = ['Abaft', 'Aspect-oriented%20programming', 'Defecation', 'Feces', 'Perl%20Object-Oriented%20Persistence', 'Poop%20(constellation)', 'Poop%20deck', 'Pooper-scooper', 'Poopy', 'Stern', 'Zoboomafoo'];
function retrieveSummary(jsonp) {
console.log(jsonp);
}
function fetchSummary() {
for (var article in articleList) {
$.ajax({
url: 'https://en.wikipedia.org/w/api.php?action=parse&page=' + article + '&prop=text&format=json§ion=0&callback=?',
dataType: 'jsonp',
contentType: 'application/json',
jsonpCallback: 'retrieveSummary',
});
}
}
我得到的输出是“Poop (constellation)”的 jsonp 对象,它位于列表的中间。尽管为articleList 中的每篇文章调用了回调函数,但这是我获得的唯一对象。
最佳答案
查看 jQuery 文档了解如何 $.when()功能有效,我想这可能对你有帮助:)
顺便说一句,避免使用async: false,除非您 100% 确定您需要一个无法使用 $.when().done/then/always 归档的同步调用
正如 @charlietfl 指出的,async: false 不适用于 jsonp 调用。
来自 jQuery 文档:
By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation
关于javascript - 如何通过列表运行 $.ajax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38192638/