AJAXボタンが付いたフォームがあります。クリックすると、予想どおり多くのものが更新されますが、これで問題ありません。
AJAX呼び出しが完了したときに呼び出される動作でリスナーを作成する方法があるかどうか疑問に思っていましたか?
ありがとう
はいあります :
Drupal.behaviors.YourBehaviour = {
attach: function(context, settings) {
$('#yourform').ajaxComplete(function(event, xhr, settings) {
if ($(event.target.id) == 'the-id-of-your-item') {
// Your code here
}
});
}
}
JQuery 1.8+のバージョンの場合、フォームやビュー自体ではなく、.ajaxComplete関数をドキュメントに添付する必要があるようです( http://api.jquery.com/ajaxcomplete/ を参照)。
以下は、D7でJquery 1.10およびビュー7.x-3.8を使用して動作しました。「your_view_id」は、ビューの[その他]設定パネルで設定されたビューのマシン名です。イベントには他にもたくさんの情報があります。Ajaxの結果が目的のビューのものかどうかを判断するために、キーオフするxhrと設定がありますが、これは私の状況でうまくいきました:
jQuery(document).ajaxComplete(function(event, xhr, settings) {
if(typeof settings.extraData != 'undefined' && typeof settings.extraData.view_display_id != 'undefined') {
switch(settings.extraData.view_display_id){
case "your_view_id":
console.log('your_view_id ajax results!');
break;
default:
console.log('some other ajax result...');
break;
}
}
});
なしDrupal 7.24、jQuery 1.11およびビューで私のために働いた特定のソリューション7.x-3.8。
user1193694の提案は悪くなかったが、受け取った設定オブジェクトにはextraDataパラメータ。
設定オブジェクトを解析するときに、settings.dataプロパティに 'view_name ='とビューのマシン名が含まれていることがわかりました。
jQuery(document).ajaxComplete(function(event, xhr, settings) {
// see if it is from our view
if (settings.data.indexOf( "view_name=your_views_name") != -1) {
console.log('your_view_id ajax results!');
}
});
'your_views_name'をビューのマシン名に置き換えます。