2011-10-17 32 views
0

我的JS函數希望PHP代碼在發生故障時能有一定的返回。如何讓JS讀取PHP拋出的代碼

function showResult(data) 
{ 
    if (data == 'save_failed') { 
     document.getElementById('result').innerHTML = 'Unfortunately, we were not able to save your information. Please contact an admin.'; 
     return false; 
    } else { 
     $("#notify").clearForm().clearFields().resetForm(); 
     document.getElementById('result').innerHTML = 'Thank you for signing up with us.'; 
     return false; 
    } 
} 

這工作片的時候我echo 'save_failed';在一個明確的錯誤,但它不會在模具語句,如這一個的情況下工作:

mysql_connect("host", "user", "pass") or die('save_failed'); 

我輸入了錯誤的主機名,但JS功能沒有收到'save_failed'返回。

PHP腳本:

if (!(empty($_POST['name']) && empty($_POST['email']))) 
    { 
     //sanitizing inputs for MySQL insertion 
     $name = mysql_real_escape_string($_POST['name']); 
     $email = mysql_real_escape_string($_POST['email']); 

     //connecting to db 
     mysql_connect("host", "user", "pass") or die('save_failed'); 
     mysql_select_db("table") or die('save_failed'); 

     //inserting into table 
     mysql_query("INSERT INTO notify (name, email) VALUES('" . $name . "', '" . $email . "') ") 
     or die('save_failed'); 

    } 
    else 
    { 
     echo 'save_failed'; 
    } 
+3

提示:使用瀏覽器調試工具,例如我們的Firebug來查看PHP腳本生成的確切輸出。 –

+0

發佈php腳本會很有用。 – vishakvkt

+0

也發佈了PHP腳本。 – xbonez

回答

3

即使die("save_failed")將輸出「save_failed」,它不會停止發送腳本中的任何以前的輸出。

確保,如果你去到自己,那麼你是在網頁源接收只是「save_failed」的劇本並沒有錯別字

+0

你是對的。我安裝了一些調試模塊,它與'save_failed'一起發送了大量的診斷信息。 – xbonez

2

我建議在處理錯誤的另一種策略。

  1. 使用output buffering,以確保數據不會(例如,一個HTML的文件的開頭)用Exceptions
  2. 開始被髮送到客戶端。它們代表致命錯誤,但能夠確定發生錯誤的確切線和參數。
  3. 瀏覽器嘗試根據內容類型標題評估響應的類型。如果你想讓它顯示簡單的文字使用

    header('Content-Type:text/plain');

  4. 使用全球Exception handler,以您喜歡的方式轉換消息。

適合我!現在大多數服務器都有足夠的電力來使用這些更先進的方法。

+0

感謝您的提示。我會研究它。 – xbonez

0

使用die將一些信息傳遞給頁面並不是一個好主意。通常情況下,響應字符串中會有其他數據。

一個更簡單的方法是將PHP代碼嵌入到您的JS代碼中。舉例如下:

<script type="text/javascript"> 
    data = "<?php echo('Save Failed'); ?>"; 
</script>