小编典典

window.open()在AJAX成功方面的工作原理不同

ajax

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


阅读 478

收藏
2020-07-26

共1个答案

小编典典

这就像一个魅力:

// 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调用成功时,它将变量成功设置为true。
async:false属性确保在Ajax调用完成之后触发if语句。
因此,在与您的直接链接相同的情况下会触发window.open。

2020-07-26