JQuery开关滞后于开关所基于的变量(从PHP文件检索时)
我有下面的代码,它在单击箭头时增加了一个“week”变量。 然后使用week变量从PHP文件中检索信息(与该周相关) “week”变量在第一次单击时更新。 但是,从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:
$('#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;
};