行。这几天让我很沮丧。我确定我是个白痴,我面前有一个解决方案,但这是我的问题。
当按下保存按钮时,我有一系列 AJAX 调用来处理和保存来自网页的数据。这已经在 IE 中工作了多年(在我被录用之前就已经设置好了)并且没有任何问题。我们现在需要支持多种浏览器,即 IE、Firefox、Chrome 和 Safari。
当我尝试在 Firebug 中按下保存按钮时,我看到的是我进行了第一个 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()
将使其返回语句,但代码永远不会返回到客户端成功方法。
我错过了什么?
编辑:这是请求的 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 调用不等待返回任何内容,它只是以“error”的errorType 和errorThrown 的空字符串出错。
编辑 3:来自 Fiddler 的原始数据
火狐:
HTTP/1.1 200 OK Cache-Control: private, max-age=0 Content-Type: application/json; charset=utf-8 服务器:Microsoft-IIS/7.5 X-Powered-By:ASP.NET 日期:2012 年 10 月 31 日星期三 15:30:01 GMT 内容长度:178
{"d":{"__type":"CoreMotives.Web.MethodResult","Success":true,"Comments":"","Message":"","ElapsedMilliseconds":0,"SubTests":null, "NextStepAdditionalParameters":null,"Value":null}}
IE:
HTTP/1.1 200 OK Cache-Control: private, max-age=0 Content-Type: application/json; charset=utf-8 服务器:Microsoft-IIS/7.5 X-Powered-By:ASP.NET 日期:星期三,2012 年 10 月 31 日 15:29:53 GMT 内容长度:178
{"d":{"__type":"CoreMotives.Web.MethodResult","Success":true,"Comments":"","Message":"","ElapsedMilliseconds":0,"SubTests":null, "NextStepAdditionalParameters":null,"Value":null}}
再说一遍。AJAX 调用在服务器端代码返回任何内容之前命中错误处理程序。
编辑 4:从 Fiddler 链接到 .saz 文件。 http://tinyurl.com/ckmatsk
那里应该只有2个条目。