javascript - window.open() 在 AJAX 成功时的工作方式不同

标签 javascript ajax asynchronous window.open

如果我只给你看那个例子,我会更容易解释这个问题 -> http://jsfiddle.net/RU2SM/
如您所见,有 2 个按钮,一个称为“AJAX”,一个称为“直接”...因此,如果您单击“直接”,它会打开窗口(Chrome 上的新标签),但如果我尝试制作 window.open( ) 在 AJAX 成功处理程序上,它的工作方式不同。
我确定问题出在 AJAX,但我不知道如何解决。
将不胜感激任何好主意。 谢谢

最佳答案

这就像一个魅力:

// Direct window.open()
$('#btnDirect').on('click',function(){
    window.open('http://google.com')
})
var success = false;  //NOTE THIS

// AJAX window.open()
$('#btnAJAX').on("click", function(){
    $.ajax({
      url: "/user/login/",
      context: document.body,
      async:false,   //NOTE THIS
      success: function(){  //THIS ALSO CHANGED
         success = true
      }
    });
    if(success){ //AND THIS CHANGED
      window.open('http://google.com')
    }
})

这样做是在 Ajax 调用成功时将变量 success 设置为 true。
async:false 属性确保在 Ajax 调用完成后触发 if 语句。
因此 window.open 在与您的直接链接相同的情况下被触发。

关于javascript - window.open() 在 AJAX 成功时的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10223388/

相关文章:

javascript - 你能解释一下 ngList 指令吗

php - 如何显示当前有多少用户在线

javascript - 正确终止 NodeJS Async Await

javascript - 如何在 Javascript 中运行 3 秒后再次倒计时?

javascript - 从转换为 ISO 字符串的日期中删除秒/毫秒

javascript - 如何在页面刷新之间保留变量的值?

php - 登录模态窗口后刷新/更新主页

javascript - 如何在 Angular js 中的 http 请求中发送 header 数据

java - 在自己的线程中运行每个 Spring Scheduler

javascript - 如何在 WebGL 中使用多个纹理?