2013-04-16 58 views
0

我的AJAX代碼是波紋管如何停止提交按鈕,同時響應引發的錯誤(PHP錯誤)

$("#step_3 :submit").click(function(event) { 
     event.preventDefault(); 


     var formData = $("#dbConfigID").serialize(); 

     $.ajax({ 

      url: "../pard_config/dbconfig.php", 
      type: "POST", 
      data: formData, 
      beforeSend:function(){ 

      }, 

      success: function(responce) { 
      $("#res").show().html(responce); 


      } 

     }); 

    }); 

PHP代碼(只有抓)

catch (Exception $e) { 
     echo 'Warnning: ', $e->getMessage(), "\n"; 
    } 

如果我的數據庫憑據是錯誤的,它仍然顯示在螢火蟲200成功代碼。而我的提交按鈕正在觸發,而php阿賈克斯響應是一個錯誤,像波紋管

Warnning: SQLSTATE[HY000] [2005] Unknown MySQL server host 'localhosts' (1) 

如何停止按鈕觸發,而這是一個像上面的錯誤?

+0

這兩個動作/過程是完全分開的。一旦發送AJAX請求,該部分就結束了。你會得到200 OK,因爲請求是成功的。另一方面,如果PHP端在處理請求時產生錯誤,則無法返回JavaScript並阻止原始請求。你可以做的是在PHP端回顯錯誤,如果發生錯誤,並在AJAX端,處理你得到的響應,即成功或錯誤。 – ebadedude

+0

問題是我有4個步驟...而我按#step_3:提交按鈕它將隱藏第2步,併成功打開第4步...如果PHP返回錯誤同樣的事情已經返回:(我的意思是我的第4步正在打開。我想停止這個步驟 – wasana

+0

如果你返回一個格式良好的錯誤,你可能不想對'success'進行任何操作,如果你的程序報錯了,你可能需要爲' $ .ajax'來處理這種情況。對於提交問題,您可以返回false或設置您的提交按鈕來調用上述函數並返回false: '' 然後在成功的情況下,觸發提交 – ebadedude

回答

2

Javascript無法檢測到服務器上發生了什麼,因此它會關閉HTTP狀態代碼。如果您的服務器端發生故障,則需要將某種故障消息返回給客戶端。

我個人的偏好是獨自離開了HTTP狀態代碼,併發送回一個可愛的小JSON結構:

if ($failure) { 
    echo json_encode(array('status' => 'failed', 'code' => xxx, 'message' => 'Something blew up!')); 
} 

然後有

... 
success: function(data) { 
    if (data.status == 'failed') { 
    throw ServerSideError; 
    } 
    ... 
}) 
在你的JS代碼

有些人會說,你需要發送反映錯誤的HTTP狀態代碼,which'd是

if ($failure) { 
    header('HTTP/1.1 500 Database Error'); 
} 

JavaScript就拿起非2xx代碼並觸發在AJAX處理程序error代碼路徑。

+0

我們不能使用帶錯誤的ajax嗎? – wasana

+0

錯誤:函數(jXR){}像這樣? – wasana

+0

是的,按照:http://api.jquery.com/jQuery.ajax/尋找'錯誤' –