2012-08-04 107 views
0

我知道這裏有很多這個問題。我花了一整天的時間來搜索同一個問題。沒有什麼能回答我的!所以,請不要關閉這個說法,我只是複製。
我有被稱爲在同一頁面另一個JS文件上的PHP文件,這個PHP文件編碼的陣列並回它在同一頁上(這是當它從一個Ajax請求調用)那樣:

$data = array( 
    "status" => $status, 
    "message" => $message, 
); 

echo json_encode($data); 

$ status和$ message的值由它們上面的一些條件決定(這裏並不重要)。這個PHP文件在索引文件的頂部被調用,所以這意味着JSON在<!doctype html>標籤之前被回顯。現在,在js文件,這裏是我試圖處理這一JSON的部分:

$.post($formUrl, $formData, function(data) { 
    $data = $.parseJSON(data); 
    alert($data.status); 
}); 

不要擔心變量,它們都沒有問題。這裏唯一的問題是$data = $.parseJSON(data);部分。 當我運行此代碼。成功沒有任何反應,但在PHP文件中,有一個插入命令可以正確執行數據庫。一切正常,除了這個JSON,我無法得到它! 當我試試這個:

$.post($formUrl, $formData, function() { 
    $str = '{"a":1,"b":2,"c":3,"d":4}'; 
    $data = $.parseJSON($str); 
    alert($data.a); 
}); 

它能正常工作,它提醒1.所以,我認爲這個問題是,它是在$.parseJSON()不能在他們解析HTML文件,使用JSON,因爲正如我告訴你, PHP文件在< !doctype html >之前回應JSON。
我現在很絕望。任何人都可以幫忙嗎?

+0

你可以發佈服務器的響應嗎? – 2012-08-04 04:36:04

+1

螢火蟲控制檯或chrome開發工具 – Rafay 2012-08-04 04:43:41

回答

1

試着在json_encode之後做一個模子。你可以將所有東西包裝在一個if語句中,它將檢查$ _POST是否爲空。因此,在第一次加載時,您只需獲取html,但在ajax文章中,您只會獲得json。

同時嘗試使用這樣的:

$.ajax({ 
    url: $url, 
    data: $formData, 
    type: "POST", 
    dataType: "json", // this tells jquery to expect json back, and parses it automatically 
    success: function(data) { alert(data.status) } 
}) 
+0

是是是是是!!!非常感謝你的朋友!這是正確的答案!在PHP文件中,我在「echo json_encode($ data)」之後加上了「die()」;然後在我使用的js文件中:'$。後($ formUrl,$ FORMDATA,功能(數據){ \t \t \t警報(data.status); \t \t}, 'JSON');',它提醒右鍵。非常感謝! – 2012-08-04 09:58:34

3

這裏的問題是,您正在輸出JSON從您的PHP腳本頁面,也回聲HTML。您需要一個專門迴應JSON的PHP腳本。另外,在你的PHP文件中,你可能想發送一個JSON MIME類型:

header("Content-type: application/json"); 
+0

+1中的任何錯誤,但是'header'不是必須的,因爲正在使用$ .parseJSON。 – 2012-08-04 04:52:56

+0

當我在另一個頁面上輸出JSON時,我可能會使用它。 – 2012-08-04 10:40:17

1

我認爲你可以很容易地做到這一點..

發送第四個參數爲json$.post()dataType

$.post($formUrl, $formData, function(data) { 

    // after specifying the dataType you 
    // don't need to parse is manually by $.parseJSON() 
    // jQuery will parse it for you 

    // $data = $.parseJSON(data); // remove this line 

    console.log(data); 

}, 'json'); 

$.post()語法是:

$.post(url [, data] [, success(data, textStatus, jqXHR)] [, dataType]) 

你所指定的最後一個參數dataType

+0

你的也很好。我不得不指定數據類型。謝謝 :) – 2012-08-04 10:39:23