Как мне оценить этот конкретный JSON с помощью Prototype (JS)?

#php #json #prototypejs

#php #json #prototypejs

Вопрос:

Данные с сервера превратились в массив JSON в ответ на запрос ajax :

 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);

Как я могу просто получить массив Price, чтобы JSON равнялся:

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

Комментарии:

1. Предоставленные вами данные на самом деле не являются допустимым json. Это именно то, что отправляет вам сервер?

2. я думаю, что это должно было быть "price":... и "name":...

Ответ №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


Правка2: Вот как обновить сервер:

 $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']);
  

Комментарии:

1. Да, и теперь я вижу, что то, что вы получаете с сервера, не является правильным JSON, поэтому этот метод не сработает. Я бы предложил починить сервер, если это возможно.

2. исправление сервера? но как? я использую это на сервере: $price = json_encode(getPrice($db)); $name = json_encode(getName($db)); echo "Price : ", $price, "n"; echo "Name : ", $name, "n"; Это уже JSON, не так ли?

3. Это 2 строки json и некоторые другие данные, которые делают его непригодным для использования встроенными методами. Либо передайте параметр в php, чтобы указать, какой параметр вы хотите (цена или название) и только echo json_encode(...); или объедините два объекта и json_encode объединенный объект. Я добавлю пример.