2013-03-14 105 views
0

我試圖設置一個簡單的AJAX調用,通過JSON發送它的數據到我的PHP腳本,然後返回數據。如何使用AJAX和JSON發送和接收

但我沒有運氣。

這裏是我的發送代碼:

$.ajax({ 
     url: ROOT+'Address/fetchAddress', 
     type: 'POST', 
     async: false, 
     dataType: 'json', 
     data: { 
     json: { 
      "Id":"0", 
      "Name":"Jim" 
     } 
     }, 
     error: function(a, b) 
     { 
     alert(b) 
     }, 
     success: function(data) 
     { 
     data = $.parseJSON(data); 
     alert(data) 
     } 
    }) 

Serverside集團:

public function fetchAddress() 
    { 
    $JSON = $_POST['json']; 
    echo json_decode($JSON); 
    } 

但我正在逐漸 「parseerror」 的警告框,如果我檢查響應我得到:

Warning: json_decode() expects parameter 1 to be string, array given in ...public_html\controllers\Address.php on line 20 
+2

你有兩個是客戶端無需解碼返回的數據,起訴,都與數據類型有關。你的服務器端代碼期望'json' POST參數是一個字符串,而不是。你的jQuery AJAX調用期望服務器的響應是有效的JSON,事實並非如此。 – 2013-03-14 11:55:17

回答

3

這裏有一個概念錯誤。

當你說dataType: 'json'這意味着返回的數據是JSON格式。

你仍然在一個POST陣列將數據發送

public function fetchAddress(){ 
    echo $_POST['json']; 
} 

獲取數據

要拿起另一邊,你有一個預先傳遞的對象(如數據返回的JSON)

所以

success: function(data) 
    { 

    alert(data.id+"NAME"+data.name); 
    } 

(哦,你的數據不是一個字符串(AP OST預計)和JSON是那麼幹淨,它分爲一個不錯的字符串

json: '{"Id":"0","Name":"Jim"}' 
+0

謝謝,它設置爲一個字符串排序它。我現在明白了! – imperium2335 2013-03-14 12:06:23

1

您的PHP接收的數據不需要解碼,因爲它已經是一個數組。只要改變你的功能,這一點,你應該罰款

public function fetchAddress() 
{ 
    echo json_encode($_POST['json']); 
} 

而且,既然您說的jQuery,你的反應是一個JSON,沒有必要到$調用.parseJSON()來獲取你的數據

+0

關閉,但它不會工作,因爲他發佈的數據不是字符串 – cjds 2013-03-14 11:58:39

+0

急速是一個不好的顧問...修正它:) – Loupax 2013-03-14 12:00:42

1

ajax調用發送數據作爲一個數組,並希望返回的數據作爲JSON,所以PHP功能應該看起來像

public function fetchAddress() 
{ 
    $data = $_POST['json']; 
    echo json_encode($data); 
} 

因爲它指定dataType: 'json'然後這已經由ajax函數來完成

$.ajax({ 
     url: ROOT+'Address/fetchAddress', 
     type: 'POST', 
     async: false, 
     dataType: 'json', 
     ... 
     success: function(data) 
     { 
     alert(data) 
     } 
    });