好的。這幾天讓我感到沮喪。我確信我是個白癡,面前有一個解決方案,但這是我的問題。跨瀏覽器AJAX和setTimeout()在IE中可用,但在Chrome/Firefox中失敗
當按下保存按鈕時,我有一系列AJAX調用來處理和保存網頁中的數據。這在IE中工作了很多年(在我被僱用之前已經設置好了)並且沒有任何問題。我們現在需要支持多種瀏覽器,即IE,Firefox,Chrome和Safari。
我看時,我嘗試按在Firebug保存按鈕是我得到的第一個AJAX調用,我得到的200 OK響應,並參加了毫秒的時間,但是它使紡紗:
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調用並不等待任何要返回的東西,它只是以「error」的errorType和errorThrown的空字符串出錯。
EDIT 3:從提琴手
火狐 原始數據:
HTTP/1.1 200 OK 緩存控制:私人,最大年齡= 0 內容類型:應用/ JSON;字符集= UTF-8 服務器:Microsoft-IIS/7.5 X供電,通過:ASP.NET 日期:星期三,2012年10月31 15點30分01秒GMT 的Content-Length:178
{「d 「:{」 __類型 「:」 CoreMotives.Web.MethodResult」, 「成功」:真, 「註釋」: 「」, 「消息」: 「」, 「ElapsedMilliseconds」:0 「子測試」:NULL, 「NextStepAdditionalParameters」日期null, 「值」:空}}
IE:
HTTP/1.1 200 OK 緩存控制:私人,最大年齡= 0 內容類型:應用/ JSON; charset = utf-8 服務器:Microsoft-IIS/7.5 X-Powered-By:ASP。NET 日期:星期三,2012年10月31 15點29分53秒GMT 的Content-Length:178
{ 「d」:{ 「__類型」: 「CoreMotives.Web.MethodResult」, 「成功」:真」評論「:」「,」消息「:」「,」ElapsedMilliseconds「:0,」SubTests「:null,」NextStepAdditionalParameters「:null,」Value「:null}}
雖然。 AJAX調用在服務器端代碼返回任何內容之前命中錯誤處理程序。
編輯4: 從Fiddler鏈接到.saz文件。 http://tinyurl.com/ckmatsk
那裏應該只有2個條目。
所以它不是那麼跨瀏覽器,它是...? – Christian
AjaxCall函數在哪裏?你在做同步aJAX嗎? –
@dystroy我認爲它是'AjaxCall(...)'? – Christian