.ajax async:true .click与chrome中的async:false有不同的行为

时间:2013-12-16 21:25:43

标签: ajax asynchronous

首先让我说我知道.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;
});

0 个答案:

没有答案