我已經在這裏搜索了這些問題,但我沒有很好的理解如何在jQuery的AJAX中使用錯誤處理(我是一個noob,所以它真的沒有意義。 )jQuery AJAX錯誤處理
任何人都可以形容這對初學者?我目前通過AJAX向PHP腳本發佈信息,但是希望允許jQuery識別腳本返回的數據是否爲錯誤或成功。
謝謝! Dave
我已經在這裏搜索了這些問題,但我沒有很好的理解如何在jQuery的AJAX中使用錯誤處理(我是一個noob,所以它真的沒有意義。 )jQuery AJAX錯誤處理
任何人都可以形容這對初學者?我目前通過AJAX向PHP腳本發佈信息,但是希望允許jQuery識別腳本返回的數據是否爲錯誤或成功。
謝謝! Dave
從Ajax調用返回的錯誤是返回從沒有成功頁面加載的結果。這可能是你的PHP頁面返回一個有效的頁面,但結果不是你想要的。這是在成功返回時處理的。希望下面的代碼snippit將有助於說明...
$.ajax({
type: "POST",
url: "login.php",
data: "action=login&user=" + user + "&pass=" + pass,
success: function(xhr){
if ((xhr == "Invalid Login")
|| (xhr == "Invalid charaters in username.")
|| (xhr == "Missing username or password.")
|| (xhr == "Unknown Error")) {
$("#loginMessageContent").html(xhr);
}
else {
simplemodalClose (dialog);
}
},
error: function(xhr) {
alert ("Oopsie: " + xhr.statusText);
}
});
執行jQuery AJAX錯誤處理是爲了處理如果HTTP Request
有錯誤,而不是如果您的腳本返回「錯誤」或「成功」。如果服務器拋出一個錯誤(例如404 Not Found或500 Server Error),那麼它將觸發jQuery的錯誤功能。它可以通過幾種方式處理,但一種好的方法是顯示讓用戶知道存在錯誤的div。
HTML
<div id="error" style="display: none">There was an error processing your last request</div>
jQuery的
$(function(){
$("#error").ajaxError(function(){
var $error = $(this);
$error.slideDown(500, function(){
window.setTimeout(function(){
$error.slideUp(500);
}, 2000);
});
});
});
如果發生錯誤,沒有你的 「成功」 的方法將火了,那div
會滑下來,等待2秒,然後滑回。
測試腳本錯誤
正如我提到的你所描述聽起來像你的服務器腳本正在發送「錯誤」或「成功」或類似的東西回客戶端。
如果您使用的是$.post
,例如,您的錯誤處理代碼可能是這樣的:
$.post('/your/url', { save_me: true }, function(data){
if(data == "error"){
// handle error
} else {
// handle success
}
}
這只是1種方法。我正在構建一個以JSON形式返回其所有數據的應用程序。如果出現錯誤,那麼JSON消息會發生變化以反映此情況。每個返回對象的「狀態」爲 「成功」或「錯誤」。如果它是一個錯誤,那麼在 描述錯誤的JSON中有一個「error_message」部分。
我希望有幫助。
即使這不是你的問題,我會在這裏發佈,因爲它是相關的。
在最近的JQuery v1.4 release中,現在驗證了JSON響應。它打破了我的應用程序,因爲我回:
{success:true}
現在它的要求是
{"success":true} // HAS to be double quotes, single won't do it
如果不正確,它會調用錯誤處理程序。簡單的修復,但花了一點弄清楚。
比爾,這看起來很有幫助,你能否給我一個關於PHP腳本的迴應是什麼,以便jquery可以接受的想法(我的意思是,我看到它會是「無效登錄」,但我還可以迴應比這更多的信息嗎?) – 2010-01-08 22:45:09
+1偉大的答案比爾!我認爲'success'回調函數中的'xhr'參數名是誤導性的,因爲它只是返回的數據而不是'xhr'對象本身。 – 2010-01-08 22:45:45
Dave,你可以返回你想返回的任何東西,只需要知道你使用的dataType即可。對於像這個例子這樣簡單的東西,默認的dataType是好的,對於更復雜的數據來看看其他可用的數據類型。例如要使用JSON數據,請讓php代碼發送JSON數據。查看$ ajax的jquery文檔,看看如何設置dataType,也可以查看JSON方法的php文檔。 Doug,好點。 – Bill 2010-01-08 23:00:32