链接一个不确定数量的Ajax请求

时间:2013-09-24 23:14:08

标签: jquery ajax jquery-deferred .when

我需要链接一个未知(但绝对有限)的ajax请求。我想创建一个goAjax()函数并用$ .when观察它并在我的.then()块中确定是否再次调用goAjax()...这是我的问题,$ .when()似乎只是第一次发射时抓住goAjax()。我该怎么办?

                 function goAJAX(url) {

                    var jqxhr = $.ajax({ 
                        dataType: "xml",
                        url: url
                    }).fail(function(data) {
                        console.log( "error" );
                        console.log( data );
                    });

                    return jqxhr;
                }


                $.when( goAJAX(url) ).then(function( result ) {

                    var oaiJSON = $.xml2json(result); 
                    var thisBatchOfRecords = oaiJSON.ListRecords.record.length;
                    var resumptionToken = oaiJSON.ListRecords.resumptionToken.text;

                    totalRecords =+ thisBatchOfRecords;

                    if(thisBatchOfRecords > 99) {
                        var url = "https://www.aURL.com?verb=ListRecords&resumptionToken="+resumptionToken;
                        goAJAX(url);
                    }

                    console.log(totalRecords);
                });

我得到一个结果而不是第二个结果:(

任何提示都会很棒!

2 个答案:

答案 0 :(得分:0)

goAJAX(url);的第二次调用实际上并没有对结果做任何事情

处理.done(data)中的数据 - 你可以在goAjax函数中执行此操作,并保存包含记录计数等内容的变量,以确定是否要再次调用。

我不完全确定你要做什么,但猜测如果记录数量> 99,那就回想一下网址以获得更多结果?

如果是这种情况你想要创建当时的函数,并重复调用它直到count为0或数据为空。

答案 1 :(得分:0)

好的我工作了......

并不是sambomartin所说的......

基本上我在goAjax()中移动$ .when并让它看着jqxhr对象。我仍然从go ajax中调用goajax,但现在正在等待拨打电话。

以下是代码:

function goAJAX(url) {
    var jqxhr = $.ajax({
        dataType: "xml",
        url: url
    }).fail(function (data) {
        console.log("error");
        console.log(data);
    });

    $.when(jqxhr).then(function (result) {
        var oaiJSON = $.xml2json(result);
        var thisBatchOfRecords = oaiJSON.ListRecords.record.length;
        var resumptionToken = oaiJSON.ListRecords.resumptionToken.text;
        totalRecords += thisBatchOfRecords;

        if (thisBatchOfRecords >= 99) {
            console.log(totalRecords);
            var url = "https://www.someURL.com/oai/request?verb=ListRecords&resumptionToken=" + resumptionToken;
            res.html("working...");
            goAJAX(url);
        } else {
            console.log("finsished");
            res.html(totalRecords);
        }
    });
}