Передача нескольких массивов в вывод 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 и т.д., Но не получил результата. Мочь кто-нибудь мне здесь поможет??

Author: Bala, 2013-10-19

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;
}
 4
Author: Mike Vranckx, 2017-03-15 08:21:53

Я думаю, нам нужно сообщить вызову 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');
 0
Author: Ankit Agrawal, 2013-10-19 10:16:58