2011-04-08 55 views
0

從服務器數據成爲一個JSON數組作爲responseText的Ajax請求:如何使用Prototype(JS)評估這個特定的JSON?

Price : [{"id":"1","max_price":"100000"},{"id":"2","max_price":"150000"},{"id":"3","max_price":"200000.55"}] 

Name : [{"id":"1","name":"P1"},{"id":"2","name":"P2"},{"id":"3","name":"P3"}] 

我看到成原型這種方法:var json = transport.responseText.evalJSON(true);

我如何才能得到的價格排列,所以JSON等於:

[{"id":"1","max_price":"100000"},{"id":"2","max_price":"150000"},{"id":"3","max_price":"200000.55"}]` 
+0

數據實際上是無效的JSON。這*完全是*服務器向您發送的內容? – Evert 2011-04-08 12:34:07

+1

我認爲它應該是''價格「:...'和''名稱」:...' – kjy112 2011-04-08 12:35:42

回答

1

PHP的需要包括JSON頭:

header('Content-type: application/json'); 

Ajax請求需要包括evalScripts(請確保您信任的來源):

new Ajax.Request("json.php", 
      { method: 'get', 
      parameters: {'xyz': 'json', 'var2': 'some_val'}, 
      evalScripts: true, 
      onSuccess: function(response){your_function(response);}}); 

那麼你的功能可以得到像下面這樣的JSON:

your_function = function (response) { 
    var result = response.responseJSON; 
    ... 
} 

編輯:還有這些指令直接來自: http://www.prototypejs.org/learn/json


EDIT2:這裏是如何更新服務器:

$return_data = array(); 
$return_data['price'] = getPrice($db); 
$return_data['name'] = getName($db); 
echo json_encode($return_data)."\n"; 

你做到這一點後,在JS你可以做類似如下(從上面your_function例子):您提供

alert ("first id is: " + result['price'][0]['id']); 
+0

Doh,現在我看到你從服務器得到的是不正確的JSON,所以這個技術將無法正常工作。如果可能,我會建議修復服務器。 – BMitch 2011-04-08 13:37:33

+0

修復服務器?但是如何?我在服務器上使用它:'$ price = json_encode(getPrice($ db)); $ name = json_encode(getName($ db)); echo「Price:」,$ price,「\ n」; echo「Name:」,$ name,「\ n」;'這已經是JSON不是? – trouble 2011-04-08 13:52:39

+1

這是2個json字符串和一些其他數據,使其無法通過內置方法。將一個參數傳遞給php,以指示你想要的變量(價格或名稱),並且只是'echo json_encode(...);'或合併兩個對象和'json_encode'合併對象。我會用一個例子來更新。 – BMitch 2011-04-08 14:55:01