为jQuery AJAX调用添加超时

时间:2014-04-10 18:30:55

标签: jquery ajax knockout.js timeout

我作为knockout.js网格的一部分继承了以下内容。

单击图像输入时,它会使用搜索结果填充网格。

如果服务器超时(例如30秒),我想让它重新加载页面,但我对jQuery很新,不知道从哪里开始。

我可以在代码中看到success,并且已经找到了大量关于计时的资源,但不确定要测试什么或在哪里测试等。

如果可以,请告知并提前感谢您!

self.submitSearch = function () {
    $("#foundMembersTableParent").block({ message: '<img src="/Content/images/spinnerLarge.gif" /> Searching...' });
    self.selectedMembers.removeAll();
    fnOnSearch();
    $.ajax({
        type: 'POST',
        url: '/Members/MSearch',
        contentType: "application/json; charset=utf-8",
        data: self.getFormData(),
        success: function (data) {
            self.members($.map(data.searchResults, function (item) { return new Members(item) }));
            $("#foundMembersTableParent").unblock();
        },
        dataType: "json"
    });
}

self.getFormData = function () {
    var frmobj = $('#complexSearchForm').serializeObject();
    return JSON.stringify(frmobj);
 }

1 个答案:

答案 0 :(得分:2)

只需在timeout请求中添加errorajax处理程序:

$.ajax({
    type: 'POST',
    url: '/Members/MSearch',
    contentType: "application/json; charset=utf-8",
    data: self.getFormData(),
    success: function (data) {
        self.members($.map(data.searchResults, function (item) { return new Members(item) }));
        $("#foundMembersTableParent").unblock();
    },
    dataType: "json",
    timeout: 30000,      // 30 seconds
    error: function(qXHR, textStatus, errorThrown) {
        if (textStatus === "timeout") {
            // request timed out, do whatever you need to do here
        }
        else {
            // some other error occurred
        }
    }
});

请参阅文档:https://api.jquery.com/jQuery.ajax/

作为一个疯狂的猜测,我认为你可能正在使用这个插件:

http://malsup.com/jquery/block/#element

在这种情况下,在error处理程序中,您真正需要做的就是:

$("#foundMembersTableParent").unblock();

恢复网格功能。当然,您可能还想在某处调出错误消息,以便用户理解表格没有变化的原因。