C# 跨浏览器AJAX和setTimeout()在IE中工作,但在Chrome/Firefox中失败

C# 跨浏览器AJAX和setTimeout()在IE中工作,但在Chrome/Firefox中失败,c#,javascript,jquery,cross-browser,settimeout,C#,Javascript,Jquery,Cross Browser,Settimeout,嗯。这让我沮丧了好几天。我确信我是个白痴,在我面前有一个解决办法,但这是我的问题 我有一系列AJAX调用,当按下save按钮时,这些调用会处理和保存网页中的数据。这已经在IE中工作了很多年(在我被录用之前就已经设置好了),并且没有任何问题。我们现在需要支持多种浏览器,即IE、Firefox、Chrome和Safari 当我尝试在Firebug中按下save按钮时,我看到的是,我得到了第一个AJAX调用,得到了200OK响应和它所用的时间(毫秒),但是它一直在旋转: 这17秒是因为我跳过了服务

嗯。这让我沮丧了好几天。我确信我是个白痴,在我面前有一个解决办法,但这是我的问题

我有一系列AJAX调用,当按下save按钮时,这些调用会处理和保存网页中的数据。这已经在IE中工作了很多年(在我被录用之前就已经设置好了),并且没有任何问题。我们现在需要支持多种浏览器,即IE、Firefox、Chrome和Safari

当我尝试在Firebug中按下save按钮时,我看到的是,我得到了第一个AJAX调用,得到了200OK响应和它所用的时间(毫秒),但是它一直在旋转:


这17秒是因为我跳过了服务器端代码

AJAX成功处理程序方法从未被调用,整个过程都会崩溃。我已经尝试了几种不同的搜索方法,但它们似乎都没有什么不同。这是原始代码

编辑5: 这是更新后的代码。我简化了它,去掉了Step()方法和所有超时。只是AJAX调用导致了问题

    function SubmitForm() {
        $.blockUI({ message: waitMessage, css: { padding: 5} });

        var settingsXml = GetSettingsXml();
        ajaxParameters = "customerId:'" + customerId + "', connectionId:" + connectionId + ", settingsXml:'" + settingsXml + "', securityToken:'" + securityToken + "'";

        AjaxCall("EmailMarketingSettings.aspx", "Validate", ajaxParameters, function (result) {
            alert("It works!")
        }, function (result) {
            alert("It's broken!");
        });
    }
Validate()
将返回到return语句,但代码永远不会返回到客户端成功方法

我错过了什么

编辑: 下面是请求的AjaxCall方法

function AjaxCall(pageName, methodName, parameters, onSuccessCallback, onFailureCallback) {
    $.ajax({
        type: "POST",
        url: pageName + "/" + methodName,
        data: "{" + parameters + "}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        timeout: 120000,
        success: function (resp) {
            result = resp.d;
            if (result.Success) {
                if (onSuccessCallback != null && typeof (onSuccessCallback) == "function") {
                    onSuccessCallback(result);
                } else {
                    $.unblockUI();
                }
            } else if (onFailureCallback != null && typeof (onFailureCallback) == "function") {
                onFailureCallback(result.Message);
            } else {
                alert(result.Message);
                $.unblockUI();
            }
        },
        error: function (req, errorType, errorThrown) {
            var errorMessage = "";
            if (errorType == "timeout") {
                errorMessage = "A timeout has occured"
            } else if (req.responseText.length > 0) {
                errorMessage = (req.responseText.substring(0, 1) == "{" ? eval("(" + req.responseText + ")").Message : req.responseText);
            } else {
                errorMessage = req.status;
            }
            if (onFailureCallback != null && typeof (onFailureCallback) == "function") {
                onFailureCallback(errorMessage);
            } else {
                alert("An error has occured: " + errorMessage);
                $.unblockUI();
            }
        }
    });
}
编辑2: 在服务器端代码返回任何内容之前,只要发送请求,我就会点击错误处理程序。AJAX调用并不等待返回任何内容,它只是使用errorType的“error”和error抛出的空字符串出错

编辑3: 来自Fiddler的原始数据

火狐:

HTTP/1.1200ok 缓存控制:专用,最大年龄=0 内容类型:application/json;字符集=utf-8 服务器:Microsoft IIS/7.5 X-Powered-By:ASP.NET 日期:2012年10月31日星期三格林威治标准时间15:30:01 内容长度:178

{“d”:{“uuu类型”:“coretories.Web.MethodResult”,“Success”:true,“Comments”:“Message”:“elapsedmillyses”:0,“SubTests”:null,“NextStepAdditionalParameters”:null,“Value”:null}

即:

HTTP/1.1200ok 缓存控制:专用,最大年龄=0 内容类型:application/json;字符集=utf-8 服务器:Microsoft IIS/7.5 X-Powered-By:ASP.NET 日期:2012年10月31日星期三格林尼治标准时间15:29:53 内容长度:178

{“d”:{“uuu类型”:“coretories.Web.MethodResult”,“Success”:true,“Comments”:“Message”:“elapsedmillyses”:0,“SubTests”:null,“NextStepAdditionalParameters”:null,“Value”:null}

不过还是一样。AJAX调用在服务器端代码返回任何内容之前命中错误处理程序

编辑4: 从Fiddler链接到.saz文件。


里面应该只有两个条目。

哇。。。所有这些努力都是为了这么愚蠢的事情

多亏了这个帖子,我才知道我的问题出在哪里:

SubmitForm()方法没有返回false,因此浏览器的默认行为正在接管。一旦我将onclick更改为:

onclick=“return SubmitForm();”

发件人:

onclick=“SubmitForm();”

并使SubmitForm()返回false。它开始在Chrome和Firefox中工作


感谢所有调查此事的人。希望这对将来的人有所帮助,尽管我怀疑有很多人像我一样愚蠢…

所以它不是跨浏览器的,是吗…?AjaxCall功能在哪里?你在做同步aJAX吗?@dystroy我想是
AjaxCall(…)
?什么是$.blockUI方法?扩展Jquery?请给我们看一下
AjaxCall