当用户点击链接时,我想进行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中进行这种同步调用? 谢谢你的帮助。
答案 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
键并采取了适当的措施。
感谢专家的提示。有时候,最简单的想法需要别人提醒。这是伟大的社区!