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);
                });

私は1つの結果を取得し、2番目の結果は取得しません:(

どんなヒントも素晴らしいでしょう!

4

2 に答える 2

0

への 2 番目の呼び出しgoAJAX(url);は、結果に対して実際には何もしません。

からのデータを処理します.done(data)-goAjax関数でこれを行い、レコード数などを含む変数を保持して、再度呼び出すかどうかを決定できます。

あなたが何をしようとしているのか完全にはわかりませんが、レコードの数が 99 を超える場合は、URL を呼び出してより多くの結果を取得すると思いますか?

このような場合は、 when を実行する関数を作成し、カウントが 0 またはデータが空になるまで繰り返し呼び出します。

于 2013-09-24T23:48:52.500 に答える
0

わかりました...

それはサンボマーティンが言っていたこととはちがった...

基本的に、 $.when を goAjax() 内に移動し、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 に答える