Javascript没有';t更新用PHP编写的变量
我有一个调用AJAX的javascript函数,如下所示:Javascript没有';t更新用PHP编写的变量,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个调用AJAX的javascript函数,如下所示: function addSquadronByID(id) { $.ajax ({ type: "POST", url: "server/get_squadron.php", data: { 'id': id, 'counter': squadron_counter
function addSquadronByID(id) {
$.ajax
({
type: "POST",
url: "server/get_squadron.php",
data: {
'id': id,
'counter': squadron_counter
},
cache: false,
success: function (data) {
squadron_counter++;
},
error: function () {
alert("AJAX error.");
}
});
}
}
$list_squadrons = $DB->Execute($query);
while(!$list_squadrons->EOF){
$currentSquadron_id = $list_squadrons->fields["squadron_id"];
$currentSquadron_number = $list_squadrons->fields["squadrons"];
echo "addSquadronByID($currentSquadron_id);\n";
$list_squadrons->MoveNext();
}
在document.ready
之外,变量初始化如下var中队计数器=0代码>
当我在页面中调用此函数时,此函数非常有效,但是如果我尝试使用PHP在页面中编写此函数,如下所示:
function addSquadronByID(id) {
$.ajax
({
type: "POST",
url: "server/get_squadron.php",
data: {
'id': id,
'counter': squadron_counter
},
cache: false,
success: function (data) {
squadron_counter++;
},
error: function () {
alert("AJAX error.");
}
});
}
}
$list_squadrons = $DB->Execute($query);
while(!$list_squadrons->EOF){
$currentSquadron_id = $list_squadrons->fields["squadron_id"];
$currentSquadron_number = $list_squadrons->fields["squadrons"];
echo "addSquadronByID($currentSquadron_id);\n";
$list_squadrons->MoveNext();
}
该函数将正确的调用写入document.ready(),但即使该函数正常工作,squadron\u counter
始终为zero
。我唯一的想法是,它是这样工作的,因为javascript一次调用所有函数,而不必等到第一个函数完成后再执行第二个函数,等等。。但我该如何解决这个问题呢
按要求的HTML输出:
addSquadronByID(3, squadron_counter);
addSquadronByID(5, squadron_counter);
addSquadronByID(6, squadron_counter);
这被放进一个盒子里
$( document ).ready(function() {
});
在一个
标记中。我认为您关于JS调用所有函数而不等待第一个函数完成的想法是正确的。这称为“异步请求”。有关详细说明,请参阅
我们的想法是发送3个请求,然后等待它们全部完成,然后再检查中队计数器
变量的值(或在成功
回调中更新的任何数据)
那么如果我的理解是正确的,你不知道如何实施这个等待
因为您使用的是jQuery,所以实现非常简单。首先请注意,您返回的是一个。因此,只需保留由您发送的每个AJAX请求创建的延迟对象的引用。然后,您可以在其Then
方法中使用回调来等待所有请求完成:
功能添加中队id(id){
return jQuery.ajax({/*…*/});//返回延迟对象。
}
变量d1=添加中队ID(3),
d2=添加中队ID(5),
d3=添加中队ID(6);
jQuery.when(d1,d2,d3)。然后(
//成功传递所有延迟对象时执行回调。
函数(){
控制台日志(中队计数器);
}
);
演示:请显示html输出。不清楚PHP脚本输出的位置。您将第二个脚本放在第一个脚本的回调中。根据请求添加了HTML输出为什么不计算PHP中的中队计数器的最终值??您何时检查中队计数器的值?你所说的“当我在页面中调用它时它工作”是什么意思?JS将在不等待任何一个请求成功的情况下发送所有3个请求是正确的(这是异步任务的预期行为,如AJAX的第一个“A”中所述)。因此,如果您在发送这3个请求后立即检查中队计数器
值,则您没有机会完成这些请求中的任何一个,因此无法更新该值。