Передача нескольких массивов в вывод drupal json() не дает правильного вывода в jquery ajax
Передача нескольких массивов в drupal_json_output() не дает правильного вывода в jquery ajax.
Я использую функцию menu_callback и возвращаю несколько массивов, таких как
function test_callback() {
for($i = 0; $i < 10; $i++) {
$arr = array('message' => 'test'.$i, 'data' => 'data'.$i);
$arrs[] = $arr;
}
drupal_json_output($arrs);
}
Теперь, в jquery, я написал так:
$.ajax({
url: the above url,
dataType: 'json',
success: function(data) {
$(data).each(function(key,val) {
console.log(val.message);
});
})
});
Вывод в консоли выдает объект.
Я также пытался использовать $.each
для val, но вывод, который он возвращает, не определен. Я пробовал многими способами использовать $.get
и т.д., Но не получил результата. Мочь кто-нибудь мне здесь поможет??
2 answers
Чтобы настроить службу, которая возвращает данные в формате json, вы должны установить delivery callback
в drupal_json_output
. При этом будут выводиться только данные службы, а не весь HTML-код, определенный в вашей теме.
Например
function YOURMODULE_menu()
{
$items = array();
$items['service/ajax'] = array(
'title' => t('Ajax service'),
'page callback' => 'YOURMODULE_ajax',
'delivery callback' => 'drupal_json_output',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function YOURMODULE_ajax()
{
for($i = 0; $i < 10; $i++) {
$arr = array('message' => 'test'.$i, 'data' => 'data'.$i);
$arrs[] = $arr;
}
return $arrs;
}
Я думаю, нам нужно сообщить вызову ajax, что ответ находится в JSON, как только мы попробуем следующий код:
// Callback function of ajax (PHP file).
function test_callback() {
for($i = 0; $i < 10; $i++) {
$arr = array('message' => 'test'.$i, 'data' => 'data'.$i);
$arrs[] = $arr;
}
// Returns data in JSON format.
drupal_json_output($arrs);
}
// Js code for making an ajax call, and handling the response of ajax.
$.ajax({
url: the above url,
dataType: 'json',
success: function(data) {
// Check the reponse data in the firebug console.
console.log(data);
/** Commenting the code for now, once you get the data than uncomment this.
$(data).each(function(key,val) {
console.log(val.message);
});
*/
}, 'json');