2010-11-06 122 views
0

我在這裏抨擊我的頭靠在牆上,我希望有人能幫助我。使用AJAX從PHP發送JSON到JavaScript

我有一個調用PHP頁面的AJAX函數。該頁面返回一個JSON對象,然後應該解析並顯示給用戶。一切正常,除非返回JSON對象,試圖解析它給出未定義。

的PHP:

$jsonArray= array(
       'request' => 'this is the request', 
       'response' => 'this is the response' 
      ); 
echo json_encode($jsonArray); 

在阿賈克斯,我做了以下內容:

var display=xmlHttp.responseText; 
alert(display); //gives {"request":"this is the request","response":"This is the response"} 
alert(display.request); //gives undefined 

我失去了一些東西明顯?將相同的字符串直接粘貼到JavaScript變量中似乎工作正常...

+0

別忘了用你的JSON對象(text/json)發送正確的頭文件。 text/html將起作用,因爲兩者都是文本,但發送正確的MIME類型是一種很好的做法。 – zzzzBov 2010-11-06 03:31:23

+0

@zzzzBov:根據RFC 4627,不正確的JSON MIME類型是'application/json'。你可以在echo語句之前使用PHP代碼'header('Content-type:application/json');'來設置它。 – PleaseStand 2010-11-06 06:25:46

+0

@idealmachine道歉,我沒有查找正確的MIME類型。我的觀點仍然認爲text/html將起作用,因爲兩者都是文字。 – zzzzBov 2010-11-06 16:50:43

回答

1

您需要解析從服務器返回的JSON數據。有許多圖書館要做到這一點,如:

jQuery

+0

jQuery'$ .parseJSON'的文檔:http://api.jquery.com/jQuery.parseJSON/ – PleaseStand 2010-11-06 06:31:33

0

display是一個字符串。您將需要使用

var obj = eval(display) 

但eval()不像使用JSON.parse()那樣安全。

+0

請在解析來自外部源的腳本之前進行驗證。這是跨站腳本(XSS)的主要原因。 – zzzzBov 2010-11-06 03:32:26

+0

如果返回對象而不是數組,則代碼將不起作用。 JavaScript需要括號以消除a)對象字面符號和b)一組語句之間的歧義。 – PleaseStand 2010-11-06 06:30:50

1
var myObject = eval('(' + display + ')'); 
2

您將需要解析json字符串。 JSON.parse應該做的伎倆。如果它不起作用,那麼您編碼的對象可能有問題。