2017-09-27 53 views
0

我有一個簡單的ajax請求。 它調用一個PHP頁面並連接到一個MySQL數據庫。如果SQL連接失敗,則不會觸發ajax錯誤

即使連接失敗(因爲我關掉MySQL服務),我的Ajax調用的成功部分被觸發...

$.ajax(
      { 
       type: "POST", 
       url: "ajax.php", 
       timeout: 10000, 

       data: (
       { 
        "type": "approveAndEmail", 
        "id": id      
       }), 

       error: function(){ 
        alert('error'); 
        }, 

       success: function(response) 
       { 
        alert('yes'); 
         } 
      }); 

任何想法?

我的PHP看起來是這樣的(是的,我會從的mysql_connect被更新!

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 
+0

如果服務器返回200頭,則成功部分被觸發。所以它只是告訴你在到達腳本時沒有發生錯誤,腳本沒有響應任何類似錯誤的頭(4 **,5 **)。所以你應該確保腳本在連接失敗時發送類似的錯誤。 – Jeff

+1

... cnt:連接後檢查mysqli_error,或者繼續或發送錯誤(一個http標頭500 fe)回客戶端(最好帶有錯誤信息,您可以在'error:function(error){}中讀取' – Jeff

+0

標記爲重複是有幫助的,但更重要的是,如果通知鏈接到這個問題的答案。我的搜索沒有找到它。這裏的帖子已經幫助很大,現在正在工作。 – Jack

回答

1

您可以通過如果MySQL連接失敗時拋出一個異常,像這樣解決這個問題,

$serverConn= mysql_connect("$host", "$username", "$password"); 
$dbConn = mysql_select_db("$db_name"); 

if (!$serverConn || !$dbConn) { 
     throw new Exception("Database Connection Failed"); 
} 

通過拋出異常,將發生內部服務器錯誤,將由AJAX fail回調檢測到。

務必修改您的ajax這樣調用:

$.ajax(
      { 
       type: "POST", 
       url: "ajax.php", 

       data: (
       { 
        "type": "approveAndEmail", 
        "id": id      
       }), 
      }).done(function(data) { 
        alert("Call Worked") 
      }) 
      .fail(function(data) { 
       alert("error happened(DB)") 
      }) 

.fail通話似乎更好地捕捉內部服務器錯誤。

讓我知道這是否有效。

+0

感謝您的迴應我已經嘗試過,但即使數據庫連接失敗,.done()觸發!它似乎並沒有拿起拋出的異常 – Jack

+0

我已經將它包裝在一個try {} catch {}中,這似乎工作...?它應該沒有這個工作? – Jack