2013-02-27 34 views
3

我有一個問題,使用ajax調用來設置initSelection方法,我返回「undefined」。 我檢查和ajax調用返回正確的結果.. 我不明白的方法如何設置回調方法,以確保您選擇'預設值。Select2 initSelection

function mediaFormatResult(media) { 
     var markup = "<div class='media-title'>" + media.name + ", " + media.prov + " (" + media.region + ")</div>"; 

     return markup; 
    } 

    function mediaFormatSelection(media) { 
     return media.name +", " + media.prov + " (" + media.region + ")"; 
    } 
    $field = $('#comune'); 
    $($field).select2({ 
     placeholder: "Seleziona il tuo comune", 
     minimumInputLength: 3, 
     initSelection: function(element, callback) { 

     return $.ajax({ 
      type: "POST", 
      url: "myurl", 
      dataType: 'json', 
      data: { id: (element.val())}, 
      success: function(data){ 
       //results: data.results; 
      } 
     }).done(function(data) { 
      //console.log(data); 
      callback(data); 
     }); 

     }, 
     ajax: { 
      quietMillis: 100, 
      url: "myurl", 
      dataType: 'json', 
      type: 'POST', 
      data: function (term, page) { 
       return { 
        q: term, 
        page_limit: 10 
       }; 
      }, 
      results: function (data, page) { 
       return {results: data.results}; 
      } 
     }, 
     formatResult: mediaFormatResult, 
     formatSelection: mediaFormatSelection, 
     formatNoMatches: function() { return "Nessun risultato trovato!";}, 
     formatSearching: function() { return "Ricerco.."; }, 
     formatInputTooShort: function(input, min) {return "Inserire "+ (min - input.length) + " caratteri.";}, 
     dropdownCssClass: "bigdrop", 
    }); 

有什麼問題嗎?

+0

我回答其他問題。看看: http://stackoverflow.com/a/30625628/2788478 – 2015-06-03 16:26:37

回答

3

下面的方式來解決:

initSelection: function(element, callback) { 

     return $.ajax({ 
      type: "POST", 
      url: path, 
      dataType: 'json', 
      data: { id: (element.val())}, 
      success: function(data){ 

      } 
     }) 

必須注意的是,數組在控制器中創建,它應該是這樣的:

foreach ($entities as $member) { 
     $json['id'] = $member->getId(); 
     $json['name'] = $member->getComune(); 
     $json['region'] = $member->getRegione()->getRegione(); 
     $json['prov'] = $member->getProvincia()->getSigla(); 
} 

     $result = $json; 
     return json_encode($result); 
11

注意的是,該數據你發送到回調函數,需要成爲一個對象,用ID文本屬性。

這是對我工作:

initSelection: function(element, callback) { 
    var id; 
    id = $(element).val(); 
    if (id !== "") { 
     return $.ajax({ 
     url: url, 
     type: "POST", 
     dataType: "json", 
     data: { 
      id: id 
     } 
     }).done(function(data) { 
     var results; 
     results = []; 
     results.push({ 
      id: data.id, 
      text: data.name 
     }); 
     callback(results[0]); 
     }); 
    } 
    } 
+0

Upvoted。不確定其他答案通過空成功處理程序實現了什麼? – 2014-10-08 13:09:40

+0

謝謝!經過許多痛苦之後,這解決了它! – 2015-02-27 16:54:21

+0

'initSelection'選項已被棄用,以支持自定義數據適配器(Select2版本4+),請參閱https://select2.github.io/options.html。 – lubosdz 2015-03-14 11:53:46