0

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

所以我最终这样做了,但由于某种原因,在 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 中进行同步调用吗?
谢谢您的帮助。

4

2 回答 2

2

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

于 2013-10-16T16:28:02.297 回答
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在单击过程中是否按下了键并采取适当的措施。

谢谢各位高手指点。有时,最简单的想法需要别人的提醒。这是一个很棒的社区!

于 2013-10-21T12:17:19.227 回答