web-dev-qa-db-ja.com

複数の配列をdrupal_json_output()に渡しても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);
});
})
});

コンソールの出力はオブジェクトを提供しています。

Valにも$.eachを使用しようとしましたが、出力が未定義として返されます。 $.getなどを使用してさまざまな方法で試しましたが、出力が得られませんでした。誰か私をここで助けてもらえますか?

1
Kiran Tej

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
Mike Vranckx

次のコードを試してみると、レスポンスがJSONであることをajax呼び出しに知らせる必要があると思います。

// 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
Ankit Agrawal