Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
JQuery开关滞后于开关所基于的变量(从PHP文件检索时)_Php_Jquery_Post_Switch Statement - Fatal编程技术网

JQuery开关滞后于开关所基于的变量(从PHP文件检索时)

JQuery开关滞后于开关所基于的变量(从PHP文件检索时),php,jquery,post,switch-statement,Php,Jquery,Post,Switch Statement,我有下面的代码,它在单击箭头时增加了一个“week”变量。 然后使用week变量从PHP文件中检索信息(与该周相关) “week”变量在第一次单击时更新。 但是,从PHP文件检索到的数据直到第二次单击才更新,因此数据滞后一周 $('#fixtures-right-arrow').on('click', function(){ week++; switch (week) { case 1:

我有下面的代码,它在单击箭头时增加了一个“week”变量。 然后使用week变量从PHP文件中检索信息(与该周相关)

“week”变量在第一次单击时更新。 但是,从PHP文件检索到的数据直到第二次单击才更新,因此数据滞后一周

 $('#fixtures-right-arrow').on('click', function(){  
        
        week++;

        switch (week) {

            case 1:

                $.post("includes/fixture_1_home_lookup.php", {
                home_1_league_position_id:  home_1_league_position_id
                }, function (data, status) {
                home_team_1 = data;
                }); 
           
            break;

代码似乎是在运行switch之前运行的。有没有办法避免这种情况

(我在从PHP文件检索数据的每个单击事件上都会遇到类似的延迟。一个访问多个不同PHP文件的弹出窗口直到第七次单击时才出现,然后在所有数据都已就绪的情况下完美地出现。)


PHP文件都包含从本地托管数据库检索数据的MySQL查询)。

下面的代码工作正常

.done在返回AJAX($.post)结果后更新HTML

    $('#fixtures-right-arrow').on('click', function(){  
                   
        switch (week) {

            case 1:

        function postFixt1HomeWk1 (){
            return $.post("includes/fixture_1_home_lookup.php", {
                home_1_league_position_id:  home_1_league_position_id
                });
            }

            postFixt1HomeWk1().done(function(data){
                home_team_1 = data
                $('#home-team-1').html(home_team_1);   
            });

                
        break;

        };
以前,AJAX($post)请求下的代码是在AJAX($post)请求被执行之前执行的,因为AJAX会等待堆栈中的所有代码被执行后再执行自己


评论中提供的链接对于理解这一点非常有用

“代码似乎在运行week++之前运行了开关。”-不,这是不可能的。“然后它使用week变量从PHP文件中检索信息”-与该POST请求一起传递的唯一数据是
{home\u 1\u league\u position\u id:home\u 1\u league\u position\u id}
-那么这周的具体时间是在哪里?或者你说的这个短语是指其他的东西吗?根据星期的不同,开关会指向不同的文件。案例2是$.post(“includes/fixture_1_home_lookup_wk2.php”)。您在这里没有正确处理AJAX请求的异步性质。
$('#home-team-1').html(home_team_1);
在AJAX请求完成之前执行,这就是为什么您会得到一个“旧的”结果,因为在代码的这一点上,这仍然是当前的结果。您不需要(同步请求不好,它们会阻塞UI。)而是从AJAX请求本身的回调函数中更新HTML。
    $('#fixtures-right-arrow').on('click', function(){  
                   
        switch (week) {

            case 1:

        function postFixt1HomeWk1 (){
            return $.post("includes/fixture_1_home_lookup.php", {
                home_1_league_position_id:  home_1_league_position_id
                });
            }

            postFixt1HomeWk1().done(function(data){
                home_team_1 = data
                $('#home-team-1').html(home_team_1);   
            });

                
        break;

        };