我需要链接一个未知(但绝对有限)的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);
});
我得到一个结果而不是第二个结果:(
任何提示都会很棒!
答案 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);
}
});
}