2014-01-21 61 views
-6

我的jQuery做一個帖子PHP,像這樣:爲什麼JavaScript不能識別PHP的這個輸出?

$.post("/contact/edit_contact", serialized).done(
    function(response) { 
     if (response.success) { 
      $('#row-' + id).html(response.html); 
     } else { 
      alert("There was a problem saving"); 
     } 

處理它返回此響應(在網絡選項卡)的PHP:

<div> 
    A bunch of HTML... 
</div> 

Warning: Cannot modify header information - headers already sent by (output started at /.../contact.controller.php:56) in /.../include/App.class.php on line 82 

Call Stack: 
    0.0005  683376 1. {main}() pathTo/index.php:0 
    ....  
    pathTo/contact.controller.php:58 
    0.6205 6286496 6. header() pathTo/App.class.php:82 

{"success":true,"html":"<div>\n .... </div>"} 

但是當我做console.log(response.success)我得到「不確定」。

爲什麼JavaScript/jQuery承諾沒有看到response.success設置爲true?

+8

因爲作爲一個整體,反應只是一個特別沒有什麼大混亂的混雜。如果''success':true'部分嵌入到Moby Dick文本的中間,那麼您是否期望jQuery神奇地確定您的意思? – Jon

+2

問題是爲什麼javascript沒有正確解析PHP產生的「headers already sent」錯誤? – adeneo

回答

2

這裏有兩件事很重要;首先,輸出的代碼必須是,只有包含您要返回的JSON。如果刪除之前輸出的HTML,那麼很可能也會解決返回的PHP錯誤。

當你到只有這個從服務器你回來......

{"success":true,"html":"<div>\n .... </div>"} 

...你必須把它解釋爲JSON。這樣做的最好方式是通過PHP發送一個標頭:

header("Content-Type: application/json; charset=utf-8"); 

但在任何情況下,你可以告訴jQuery的:首先將下面一行在你done - 函數來解釋響應爲JSON不管:

response = $.parseJSON(response); 

希望這有助於!

+1

您也可以將'json''作爲參數添加到'$ .post'(回調之後),以告訴jQuery爲您解析它。 –

+1

您可以使用'json_encode'創建JSON格式的字符串。 –

6

因爲在JSON格式的字符串之前有一堆東西。

爲什麼在JSON字符串之前輸出HTML(並嘗試修改標頭)?

相關問題