首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在列表中运行$.ajax?

如何在列表中运行$.ajax?
EN

Stack Overflow用户
提问于 2016-07-04 21:51:08
回答 3查看 58关注 0票数 0

当我多次运行$.ajax时,似乎不需要等到ajax调用完成后再继续运行我的代码。由于我使用的是jsonp,设置‘异步: false’不起作用(至少我已经读过了)。我必须使用jsonp来访问Media,所以改变它不是一种选择。我是Javascript的初学者,这是我需要“承诺”的东西吗?

代码语言:javascript
复制
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&section=0&callback=?',
      dataType: 'jsonp',
      contentType: 'application/json',
      jsonpCallback: 'retrieveSummary',
    });
  }
}

我得到的输出是'Poop (星座)‘的jsonp对象,它位于列表的中间。这是我得到的唯一对象,尽管对articleList中的每一篇文章都调用了回调函数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-04 22:05:53

尝试这样的方法(未经测试):

代码语言:javascript
复制
var articleList = ['Abaft', 'Aspect-oriented%20programming', 'Defecation', 'Feces', 'Perl%20Object-Oriented%20Persistence', 'Poop%20(constellation)', 'Poop%20deck', 'Pooper-scooper', 'Poopy', 'Stern', 'Zoboomafoo'];

Promise.all(articleList.map(function(article) {
    return $.ajax({
        url: 'https://en.wikipedia.org/w/api.php?action=parse&page=' + article + '&prop=text&format=json&section=0&callback=?',
        dataType: 'jsonp',
        contentType: 'application/json',
    });
  })).then(function(results) {
    console.log(results);
});

ajax调用返回一个承诺,Promise.all等待所有承诺被解析后再调用。

票数 2
EN

Stack Overflow用户

发布于 2016-07-04 21:57:20

查看关于jQuery函数如何工作的$.when()文档,我认为这可能对您有所帮助:)

顺便说一句,避免使用异步: false,除非您100%确信您需要一个不能与$.when()..done/ call归档的同步调用

正如@charlietfl所指出的,异步: false不适用于jsonp调用。

来自jQuery文档:

默认情况下,所有请求都是异步发送的(即默认设置为true )。如果需要同步请求,请将此选项设置为false。跨域请求和dataType:"jsonp“请求不支持同步操作。

票数 4
EN

Stack Overflow用户

发布于 2016-07-04 22:26:51

试试我的例子。

代码语言:javascript
复制
function Timer() {
    this.interval = 1000;
    this.maxloop = 0; //max loop.
    this.onTimerLoop = function () {
    };
    this.onTimerStop = function () {
    };
    var global = this;
    var count = 0;
    var taskID = -1;
    var isWorking = false;
    this.start = function () {
        if (taskID === -1) {
            count = 0;
            isWorking = false;
            taskID = window.setInterval(function () {


                if (!isWorking) {
                    count += 1;
                    isWorking = true;
                    if (global.maxloop > 0 && (count > global.maxloop)) {
                        global.stop();
                    } else {
                        global.onTimerLoop();
                    }
                    isWorking = false;
                }


            }, global.interval);
        }

    };
    this.stop = function () {
        if (taskID !== -1) {
            window.clearInterval(taskID);
            taskID = -1;
            global.onTimerStop();
        }
    };



}

var articleList = ['Abaft', 'Aspect-oriented%20programming', 'Defecation', 'Feces', 'Perl%20Object-Oriented%20Persistence', 'Poop%20(constellation)', 'Poop%20deck', 'Pooper-scooper', 'Poopy', 'Stern', 'Zoboomafoo'];
var timer = new Timer();
timer.interval = 300;
var currentPositionArticle = 0;
var lastCurrentPositionArticle = -1;
timer.onTimerLoop = function () {
    if (currentPositionArticle !== lastCurrentPositionArticle) {
        lastCurrentPositionArticle = currentPositionArticle;
        $.ajax({
            url: 'https://en.wikipedia.org/w/api.php?action=parse&page=' + articleList[currentPositionArticle] + '&prop=text&format=json&section=0&callback=?',
            dataType: 'jsonp',
            contentType: 'application/json',
            jsonpCallback: "retrieveSummary"
        });

        if (currentPositionArticle === articleList.length - 1) {
            timer.stop();
        }
    }
};
timer.start();

function retrieveSummary(jsonp) {
    currentPositionArticle++;
    alert(jsonp);
    wait = false;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38192638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档