我有一个ajax调用,该调用旨在查询报告队列,然后使用该ID再次查询报告并返回JSON。这段代码有效:
$(document).ready(function(){
$("#r2").click(function(){
$('#loading').show();
$.ajax({
url: "report.php",
dataType: 'json',
data: {
type: 'queue',
ref: 2
},
success: function(result){
console.log(result.reportID);
setTimeout(function(){
console.log("Go");
$.ajax({
url: "report.php",
dataType: 'json',
data: {
type: 'get',
ref: result.reportID
},
success: function(result){
console.log(result);
$('#loading').hide();
$('#output2').html(result.report.totals);
}
});
},1000);
}});
});
});
尽管有时候报告还没有准备好,在这种情况下,我们会以JSON而不是result.report.totals
{error: "report_not_ready", error_description: "Report not ready", error_uri: null}
所以,我要的是让它再次以相同的结果尝试这段代码。reportID:
success: function(result){
console.log(result.reportID);
setTimeout(function(){
console.log("Go");
$.ajax({
url: "report.php",
dataType: 'json',
data: {
type: 'get',
ref: result.reportID
},
success: function(result){
console.log(result);
$('#loading').hide();
$('#output2').html(result.report.totals);
}
});
},1000);
}});
我对此的尝试如下:
success: function(result){
if (result.report.error == "report_not_ready") {
// RERUN THE SUCCESS FUNCTION
}
// OTHERWISE OUTPUT THE TOTAL
$('#output2').html(result.report.totals);
}
我如何要求它通过成功函数循环返回以重试查询报告?
答案 0 :(得分:2)
首先,这里您无需重复代码,而只是将其替换为参数。此外,它允许在需要时递归调用。
$("#r2").click(function(){
getReport(2, 'queue')
});
function getReport(refId, type)
{
$.ajax({
url: "report.php",
dataType: 'json',
data: {
type: type,
ref: refId
},
success: function(result){
if (refId == 2)
{
getReport(result.reportID, 'get');
}
else if(result.report.error == "report_not_ready")
{
getReport(refId, 'get');
}
else
{
$('#output2').html(result.report.totals);
}
}
});
}
答案 1 :(得分:0)
如果成功结果是JSON,请在使用前在数组中对其进行解码。
像下面一样
success: function(result){
resultArray = $.parseJson(result); // Like this
if (resultArray.report.error == "report_not_ready") {
// RERUN THE SUCCESS FUNCTION
}
// OTHERWISE OUTPUT THE TOTAL
$('#output2').html(resultArray.report.totals);
}