2010-01-08 86 views
6

我已經在這裏搜索了這些問題,但我沒有很好的理解如何在jQuery的AJAX中使用錯誤處理(我是一個noob,所以它真的沒有意義。 )jQuery AJAX錯誤處理

任何人都可以形容這對初學者?我目前通過AJAX向PHP腳本發佈信息,但是希望允許jQuery識別腳本返回的數據是否爲錯誤或成功。

謝謝! Dave

回答

20

從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); 
    } 
}); 
+1

比爾,這看起來很有幫助,你能否給我一個關於PHP腳本的迴應是什麼,以便jquery可以接受的想法(我的意思是,我看到它會是「無效登錄」,但我還可以迴應比這更多的信息嗎?) – 2010-01-08 22:45:09

+0

+1偉大的答案比爾!我認爲'success'回調函數中的'xhr'參數名是誤導性的,因爲它只是返回的數據而不是'xhr'對象本身。 – 2010-01-08 22:45:45

+0

Dave,你可以返回你想返回的任何東西,只需要知道你使用的dataType即可。對於像這個例子這樣簡單的東西,默認的dataType是好的,對於更復雜的數據來看看其他可用的數據類型。例如要使用JSON數據,請讓php代碼發送JSON數據。查看$ ajax的jquery文檔,看看如何設置dataType,也可以查看JSON方法的php文檔。 Doug,好點。 – Bill 2010-01-08 23:00:32

2

執行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 
    } 
} 
2

這只是1種方法。我正在構建一個以JSON形式返回其所有數據的應用程序。如果出現錯誤,那麼JSON消息會發生變化以反映此情況。每個返回對象的「狀態」爲 「成功」或「錯誤」。如果它是一個錯誤,那麼在 描述錯誤的JSON中有一個「error_message」部分。

我希望有幫助。

2

即使這不是你的問題,我會在這裏發佈,因爲它是相關的。

在最近的JQuery v1.4 release中,現在驗證了JSON響應。它打破了我的應用程序,因爲我回:

{success:true} 

現在它的要求是

{"success":true} // HAS to be double quotes, single won't do it 

如果不正確,它會調用錯誤處理程序。簡單的修復,但花了一點弄清楚。