我花了很长时间试图通过各种代码迭代来解决这个问题,但没有运气。来自php背景我是javascript的新手。
假设有三个补丁的数组:patch1,patch2,patch3。 我想要实现的是:
第2点工作正常,第1点不是这样。
下面是我的代码:同时为所有3个补丁调用myAjaxInitialData函数(和底层的php脚本),而不是等待每个补丁完成。正确地说,myAjaxGetSRCount没有被称为unitl所有补丁都已完成。
<body onload="initialData(0)">
<script>
function initialData(i) {
var patches = [<?php echo $jsPatchArray ?>];
var x = patches.length - 1;
var divId = "#initialData-patch-" +i;
var script = "ajax_initial_data.php";
var dataVar = "patch";
var data = patches[i];
if ( i != x) {
i++;
$.when(myAjaxInitialData(divId,script,dataVar,data)).then(initialData(i));
} else {
$.when(myAjaxInitialData(divId,script,dataVar,data)).then(myAjaxGetSRCount);
}
}
function myAjaxInitialData(divId,script,dataVar,data ) {
return $.ajax({
type: "GET",
url: script,
data: {patch:data},
success: function( response ) {
$( divId ).html( response );
}
});
}
function myAjaxGetSRCount() {
document.getElementById('srCount').innerHTML="Retrieving SR Counts..";
$.ajax({
type: "GET",
url: "ajax_sr_count.php",
success: function( response ) {
$( "#srCount" ).html( response );
}
});
}
</script>
答案 0 :(得分:1)
你的问题似乎在这里:
$.when(myAjaxInitialData(divId,script,dataVar,data)).then(initialData(i));
then
接受回调,即一个函数。 initialData(i)
不返回任何内容,因此您将undefined
传递给此函数。如果你想在这个ajax请求之后调用initialData
,那么你需要将它包装在一个无参数函数中。
$.when(myAjaxInitialData(divId,script,dataVar,data)).then(function() { initialData(i); });
您还应该非常清楚i
的值将是回调时的值。关闭迭代器变量时,应该在创建回调之前捕获所需的值。即。
if (i != x) {
i++;
var j = i;
$.when(myAjaxInitialData(divId,script,dataVar,data)).then(function() { initialData(j); });
}