Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Ajax超时问题_Jquery_Ajax_Knockout.js_Internet Explorer 11 - Fatal编程技术网

Jquery Ajax超时问题

Jquery Ajax超时问题,jquery,ajax,knockout.js,internet-explorer-11,Jquery,Ajax,Knockout.js,Internet Explorer 11,我们有一个使用MVC/Knockout js构建的应用程序。在表单的末尾,当用户开始提交时,所有数据都被转换成json字符串,并通过Jquery.ajax发送给我们的控制器。一旦数据库提交完成(如果没有问题),它将执行任何验证,并返回字符串“done”。ajax回调将设置一个具有该完成状态的变量,并提交一个包含该状态的最终表单,如果状态字符串未作为“完成”传入,则将显示少数用户看到的错误消息 我的问题是,是否有人知道任何可能导致响应不返回“完成”以外的任何内容的边缘情况(不包括验证错误或elma

我们有一个使用MVC/Knockout js构建的应用程序。在表单的末尾,当用户开始提交时,所有数据都被转换成json字符串,并通过Jquery.ajax发送给我们的控制器。一旦数据库提交完成(如果没有问题),它将执行任何验证,并返回字符串“done”。ajax回调将设置一个具有该完成状态的变量,并提交一个包含该状态的最终表单,如果状态字符串未作为“完成”传入,则将显示少数用户看到的错误消息

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

下面是我的AJAX请求,数据是使用knockout插件knockout.mapping然后使用JSON.stringify构建的。我们听到的一个用户正在使用InternetExplorer11(我无法在我的副本中重现错误)。最初的超时时间是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方法直接完成的,它传递的状态不是“完成”。设置验证时,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();
}
self.gotondepage=功能(状态){
var url=util.baseUrl('/Survey/Done');
变量形式=$('')+
'' +
'' +
'' +
'' +
'' +
'');
$('body')。追加(表格);
表单提交();
}

当返回“完成”页面时,只需使用一个简单的“if-else”来确定它是否得到了“done”字符串,如果没有,则显示消息。

这可能有助于进一步澄清问题。当你说“可能导致这种情况的边缘案例”时,你永远不会说“这”是什么。用户得到了什么错误?他们看到错误页面了吗?最终的表单是提交的还是之前的错误?@JasonSpake抱歉,我添加了更多细节。基本问题是done没有返回回调,因此可以将其传递给该表单。调查/表格方法在C#中的工作方式是,任何验证问题或一般异常问题都记录到elmah,我可以看到。因此,如果除了“done”之外还返回了任何其他字符串,那么它都将被记录。我的理论是,这可能与他们的网络设置有关,或者甚至是一个非常慢的连接,这会扰乱返回结果。从我的研究中,我找不到任何能让我走到任何地方的东西。