0

我需要链接未知(但绝对有限)数量的 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);
                });

我得到一个结果,从来没有第二个 :(

任何提示都会很棒!

4

2 回答 2

0

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

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

我不完全确定您要做什么,但是猜测如果记录数> 99,请调用 url 以获得更多结果?

如果是这种情况,您要创建执行 when then 的函数,并重复调用它,直到计数为 0 或数据为空。

于 2013-09-24T23:48:52.500 回答
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);
        }
    });
}
于 2013-09-25T20:16:52.367 回答