首先让我说我知道.ajax异步之间的区别:true是假的,并且我明白一般不建议使用同步调用。话虽如此,我认为我有一种情况需要使用async:false。
基本问题是我需要点击链接(或按钮......或其他任何内容)并保存表单数据,完成保存后我需要在浏览器中打开一个新的TAB(我们使用Chrome)。这听起来很简单,但我遇到的问题是,如果我使用带有.ajax和async的回调:true,我必须使用location.open并打开一个新窗口(在chrome中)。这是我的最终用户不能接受的。所有其他链接在新标签中打开..
这里是我被困的地方...如果我调用async:true ajax onClick一个链接,但不使用回调,我只返回true,它工作并在新选项卡中打开。但我无法保证数据及时保存,以便新窗口基于它呈现报告。所以我切换到async:false,然后我可以确保它工作但是它打开一个新的WINDOW而不是TAB。我当然不想只是循环并等到async:true返回...
我能做什么?
这是html链接:
<a id="btnSampleForm" href="/Report/Pdf?template=xyz....." target="_blank">Sample Form </a>
这是我的两个代码功能。两者都保存数据,但一个在新选项卡中打开,一个在新窗口中打开。
这个在新窗口中打开...我希望它在新标签页中打开。
$('#btnSampleForm').click(function(e) {
var retval = false;
var request = $.ajax({
type: "PUT",
url: "/api/projects/@Model.ID",
data: $('#project_form').serialize(),
dataType: "json",
traditional: true,
async: false
});
request.success(function(x) {
retval = true;
dataChanged = false;
});
request.error(function (x) {
alert('There was a problem saving the record. Please try to save the record manually before opening this report.');
retval = false;
});
return retval;
});
这个在新标签页中打开,但我无法使用它,因为我无法保证保存已完成。
$('#btnSampleForm').click(function(e) {
$.ajax({
type: "PUT",
url: "/api/projects/@Model.ID",
data: $('#project_form').serialize(),
dataType: "json",
traditional: true,
async: true
});
return true;
});