Ajax超时问题

时间:2017-03-02 20:35:25

标签: jquery ajax knockout.js internet-explorer-11

我们有一个使用MVC / Knockout js构建的应用程序。在表单结束时,当用户提交所有数据时,所有数据都变成了json字符串,并通过Jquery.ajax发送到我们的控制器。一旦它到达那里,它将执行任何验证返回字符串"完成"一旦数据库提交完成(如果没有问题)。 ajax回调将设置一个具有完成状态的变量,并提交包含该状态的最终表单,如果状态字符串未被传入"完成"错误消息将显示少数用户已经看到的内容。

我的问题是,是否有人知道可能导致回复的任何边缘情况除了"完成"之外不会返回任何其他内容。 (不包括验证错误或elmah记录的任何异常)。验证步骤将抛出一个错误,该错误将在数据无效但尚未发生的任何时刻返回elmah(elmah已记录其他问题)。对于99%的用户来说没有问题,所以我试图找出是否有一些边缘情况我没有丢失。

下面是我的AJAX请求,数据是使用knockout插件knockout.mapping然后JSON.stringify构建的。我们听过的一位用户正在使用Internet Explorer 11(我无法在我的副本中重现错误)。最初超时为10秒,我们将其提升到30,这似乎有所帮助(将其设置为1ms将返回一个空字符串)。调试问题的最大问题之一是数据是匿名的,因此很难将错误与任何用户联系起来。

        $.ajax({
            url: util.baseUrl('/Survey/Form'),
            type: "POST",
            data: dataStr,
            contentType: "application/json; charset=utf-8",
            timeout: 30000
        })
        .done(function (status) {
            if (status === "done") {
                self.gotoDonePage(status);
            } else {
                self.gotoDonePage(status);
            }
        })
        .fail(function (err) {
            self.gotoDonePage(status);
        })
        .always(function () {
            layoutSetup.hideSpinner();
        });

这些数据是匿名的,因此我们只能看到它来自何处而不是其他内容。我遇到的问题是通过gotoDonePage方法直接完成的表单提交正在传递除#34; done"之外的状态。设置验证,以便任何错误或无效数据都将被elmah捕获,而这些错误并未发生。我的理论是,由于某些问题,返回的状态是空的空间或有额外的空间。也可能是请求的完成时间超过30秒,但根据我所经历的情况,这似乎不太可能。

gotoDonePage函数基本上是

self.gotoDonePage = function (status) {
    var url = util.baseUrl('/Survey/Done');
    var form = $('<form action="' + url + '" method="post">' +
        '<input type="hidden" name="status" value="' + status + '" />' +
        '<input type="hidden" name="surveyTypeCd" value="' + self.SchoolSurveyTypeCd() + '" />' +
        '<input type="hidden" name="surveyName" value="' + self.SchoolSurveyNameTxt() + '" />' +
        '<input type="hidden" name="schoolYear" value="' + self.SchoolYear() + '" />' +
        '<input type="hidden" name="schoolName" value="' + $('#SchoolName').val() + '" />' +
      '</form>');
    $('body').append(form);
    form.submit();
}

当返回完成的页面时,只有一个简单的剃​​刀,如果确定它是否有#34;完成&#34;如果没有显示消息。

0 个答案:

没有答案