Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript没有';t更新用PHP编写的变量_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript没有';t更新用PHP编写的变量

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

我有一个调用AJAX的javascript函数,如下所示:

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个请求后立即检查
中队计数器
值,则您没有机会完成这些请求中的任何一个,因此无法更新该值。