#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
объединенный объект. Я добавлю пример.