2016-09-30 11 views
0

AJAXコール後にSelect2ドロップダウンにデータを提供しようとしています。ただし、AJAX呼び出しが完全に機能し、期待される結果が返されても、ドロップダウンでデータが取得されないようです。ここにコードがあります。ドロップダウンは#dialog-create-circleと呼ばれるJQuery UIのモーダルの内側にあり、Select2の要素はボタン#createCircleをクリックしてモーダルを開いたときにのみ作成されることに注意してください。 AJAXコールが終了するのに十分な時間を与えてもモーダルを開いても、データはまだドロップダウンボックスSelect2にロードされていないことがわかりました。私は本当にこれについていくつかの助けに感謝します。AJAXリクエスト後にSelect2データを提供

var availableTags=[]; 

$.ajax({ 
    'url': '{{site.uri.public}}/getUserList', 
    'type': 'GET', 
    'dataType': 'json', 
    'data': {}, 
    'success': function(data) { 
     availableTags=data;     
    }, 
    'error': function(data) { 
    } 
}); 

$("#createCircle").click(function() { 

     $("#dialog-create-circle").dialog("open"); 


     $("#dropdown").select2({ 
     data: availableTags 
     }); 

}); 
+0

データには何が返されますか?送信した「データ」が空の{}なのはなぜですか? –

+0

成功コールバックで 'console.log(data)'を試してください。 –

+0

availableTagsが空でない場合は、 'data:this.availableTags'に変更してみてください。最悪のオプションでは、clickイベント内でajaxを呼び出し、ドロップダウンデータを成功させることができます。 –

答えて

2

@Lucas Costaで提案されているように、関数にajaxをラップし、必要に応じて呼び出しを1つのオプションにします。このようにして、他の要素やURLのように何かを渡すこともできます:

function fillSelect2(){ 
    $.ajax({ 
    'url': '{{site.uri.public}}/getUserList', 
    'type': 'GET', 
    'dataType': 'json', 
    'data': {}, 
    'success': function(data) { 
     $("#dropdown").select2({ 
      data: data 
     }); 
    }, 
    'error': function(data) { 
    } 
    }); 
}); 

$("#createCircle").click(function() { 
    $("#dialog-create-circle").dialog("open"); 
    fillSelect2(); /* dialog now open, $('#dropdown') should be good to fill */ 
}); 
関連する問題