Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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-仅在效果完成后重新加载页面_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript-仅在效果完成后重新加载页面

Javascript-仅在效果完成后重新加载页面,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有以下代码-单击按钮后,将运行拼写功能,该功能将播放一个简短的声音并显示/隐藏一些图像,然后在PHP中通过ajax执行一些数据库查询,然后通过window刷新当前页面。位置: function spell(val,val1,val2) { if (val === 1) { let magic ='<img src="effects/thunder.png" alt="thunder"/>'; document.getElem

我有以下代码-单击按钮后,将运行拼写功能,该功能将播放一个简短的声音并显示/隐藏一些图像,然后在PHP中通过ajax执行一些数据库查询,然后通过window刷新当前页面。位置:

function spell(val,val1,val2) {

if (val === 1) {
    let magic ='<img src="effects/thunder.png" alt="thunder"/>';
    document.getElementById('thunder').play();
    $("#effect").html(magic).show().delay( 200 ).fadeOut(200);}

if (val === 2) {...}

    $.ajax
    ({url: 'spell.php',
        data: {"var1": val,"var2": val1,"var3": val2},
        type: 'get',
        success: function(json) {
             if(!json.error) window.location="game.php";
    }});

}
功能拼写(val,val1,val2){
如果(val==1){
让魔法='';
document.getElementById('thunder').play();
$(“#效果”).html(magic.show().delay(200).fadeOut(200);)
如果(val==2){…}
$.ajax
({url:'spell.php',
数据:{“var1”:val,“var2”:val1,“var3”:val2},
键入:“get”,
成功:函数(json){
如果(!json.error)window.location=“game.php”;
}});
}
如果我移除window.location,那么它工作正常,播放声音,显示图像

但是ajax的执行和窗口位置不会等到声音和jquery效果完成,它会很快刷新页面,不会播放声音,也不会显示图像


如何实现窗口位置等待效果完成?

如果希望ajax等待,我建议在淡出函数中添加回调函数

function spell(val,val1,val2) {
  if (val === 1) {
    let magic ='<img src="effects/thunder.png" alt="thunder"/>';
    document.getElementById('thunder').play();
    $("#effect").html(magic).show().delay( 200 ).fadeOut(200, function() {
      //we're ready to start the game
      startGame(val, val1, val2);
    });
  }
}

function startGame(val, val1, val2) {
  $.ajax({url: 'spell.php',
    data: {"var1": val,"var2": val1,"var3": val2},
    type: 'get',
    success: function(json) {
      if(!json.error) window.location="game.php";
    }
  });
}
功能拼写(val,val1,val2){
如果(val==1){
让魔法='';
document.getElementById('thunder').play();
$(“#效果”).html(magic).show().delay(200).fadeOut(200,function(){
//我们准备好开始比赛了
startGame(val、val1、val2);
});
}
}
功能启动名(val、val1、val2){
$.ajax({url:'spell.php',
数据:{“var1”:val,“var2”:val1,“var3”:val2},
键入:“get”,
成功:函数(json){
如果(!json.error)window.location=“game.php”;
}
});
}

谢谢,我正在考虑类似的解决方案,也可能使用then(),但希望避免创建两个单独的函数,但这不是问题,这样应该可以工作。