2012-10-21 95 views
3

我正在jQuery中調用一個PHP腳本的ajax調用。但是,PHP腳本需要返回ajax中的成功/錯誤處理程序才能觸發。因此,這裏的AJAX:
PHP Ajax成功

$.ajax({ 
     data: $this.serialize(), 
     type: "POST", 
     url: "/Scripts/script.php", 
     success: function() { 
      alert("script was successful"); 
     }, 
     error: function() { 
      alert("script was unsuccessful"); 
     } 
    }); 

因此,有幾件事情的PHP腳本可以返回如:

return 0, 1 
return true, false 
return "true", "false" 
echo "true", "false 

哪一個觸發了ajax成功/錯誤電話?

+0

要使其失敗,請使用[header()](http://php.net/manual/en/function.header.php)發送錯誤標題。 –

回答

11

只要服務器端腳本發送HTTP狀態碼200,它總是會觸發success回調。答案根本不重要。只有狀態碼。在你顯示的所有示例中,你都發送了HTTP狀態碼200 =>成功回調將始終觸發。

使用http_response_code函數,您可以強制狀態碼爲不同於200的狀態碼。

正如你可以有你的PHP腳本返回一些信息,然後成功函數內部測試,是由腳本返回的值來了解一些服務器端處理是否已出現故障的一種替代方案:

$.ajax({ 
    data: $this.serialize(), 
    type: "POST", 
    url: "/Scripts/script.php", 
    success: function(result) { 
     if (result == 'true') { 
      alert("script was successful"); 
     } else { 
      alert("script was unsuccessful"); 
     } 
    }, 
    error: function() { 
     alert("something very bad went wrong => there's a bug in the script"); 
    } 
}); 

現在您的腳本可以回顯truefalse

如果要發送複雜對象,可以使用json_encode函數將它們發送爲JSON,並使用header函數將HTTP Content-Type標頭設置爲application/json

+0

那麼腳本如何發送HTTP狀態碼200? –

+1

腳本中沒有錯誤=> HTTP狀態碼200.您可以使用'http_response_code'函數強制HTTP狀態碼。 –

+0

因此無法使用上述四個選項之一來告訴ajax腳本不成功? –

0

成功在XMLHTTPRequest上完成且沒有錯誤的請求上執行,無論您返回的結果如何。還有另一個complete回調,它會在您的AJAX腳本上執行完成,如果您有XMLHTTPRequest錯誤,則無關緊要。

+0

該腳本更新某人的密碼,所以如果出現問題(如用戶輸入的當前密碼不正確),那麼我想顯示'密碼沒有改變'或什麼的。 ajax如何知道php腳本終止不成功 –

+0

返回false,並且thema在遊覽succeshandler中有一個if-else語句。 @CharlieYabben – 11684

+1

你應該在你的結果中傳遞一個變量,說你的後處理器(php腳本可能)沒有成功地更新你的數據庫。這應該檢查'success'回調。如果你的後處理程序返回'true'成功,只要成功回調檢查成功:'function(r){if(r =='true'){...} ...}' – Reflective