複数の配列を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
などを使用してさまざまな方法で試しましたが、出力が得られませんでした。誰か私をここで助けてもらえますか?
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;
}
次のコードを試してみると、レスポンスが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');