jQuery async:false和Firefox

时间:2013-10-16 16:22:41

标签: jquery ajax firefox

当用户点击链接时,我想进行ajax调用并等待调用完成,然后再重定向用户。最初我使用preventDefault()window.location来实现结果,但这阻止了用户执行 Ctrl + Click(新标签页)

所以我最终这样做,但由于某种原因,永远不会在Firefox中进行ajax调用:

$('a.item-link').on('click', function(e){
    $.ajax({
        url: "http://123.456.789.012/c",
        type: 'GET',
        data: {
            'userId'   : '1234'
        },
        dataType: 'jsonp',
        async: false,
        cache: false,
        timeout: 1500
    });

    return true;
});

知道如何在Firefox中进行这种同步调用? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

将元素设为按钮,在完成ajax调用之前不要进行重定向。如果在拨打电话之前按下ctrl按钮,则在新窗口中打开。

答案 1 :(得分:1)

感谢@JeffB和@ bobber205,我最终做到了这一点:

$('a.item-link').on('click', function(e){
    if(e.ctrlKey){
        var newTab = true;
    } else {
        e.preventDefault();
        var _this = this;
        var newTab = false;
    }

    $.ajax({
        url: "http://123.456.789.012/c",
        type: 'GET',
        data: {
            'userId'   : '1234'
        },
        dataType: 'jsonp',
        cache: false,
        timeout: 1500,
        success: function(){
            if(!newTab){
                window.location = $(_this).prop('href');
            }
        },
        error: function(){
            if(!newTab){
                window.location = $(_this).prop('href');
            }
        }
    });

    if(newTab){
        return true;
    }
});

我只是在点击期间检查是否按下了ctrl键并采取了适当的措施。

感谢专家的提示。有时候,最简单的想法需要别人提醒。这是伟大的社区!