2017-11-10 19 views
5

सामग्री का उपयोग मैं स्वत: पूर्ण के साथ एकाधिक टैग इनपुट बनाने के लिए materialize autocomplete प्लगइन का उपयोग कर रहा हूं। प्लगइन ठीक काम करता है, फिर भी केवल अग्रिम में परिभाषित सरणी के रूप में पारित डेटा के साथ। अगर डेटा अजाक्स कॉल से पास हो जाता है, तो प्लगइन विकल्पों के साथ ड्रॉपडाउन नहीं दिखाता है जैसे कि कोई परिणाम नहीं थे। वास्तव में परिणाम हैं, वे कैश किए गए हैं (कैश विकल्प का उपयोग कर) और खोज वाक्यांश को दोबारा टाइप करने के बाद ही ड्रॉपडाउन के रूप में दिखाए जाते हैं।स्वत: पूर्ण AJAX

समेकित करने के लिए, स्वत: पूर्ण प्लगइन AJAX के अनुरोध को पूरा करने और डेटा वितरित करने की प्रतीक्षा नहीं करता है और यही कारण है कि ड्रॉपडाउन पहली कोशिश में नहीं दिखाया जाता है। क्या इस प्लगइन को ड्रॉपडाउन में सुझाव दिखाने के लिए कोई तरीका है जब इन्हें ट्रॉज अजाक्स कॉल पुनर्प्राप्त किया जाता है?

प्लगइन आरंभीकरण:

autocomplete = $('#multipleInput').materialize_autocomplete({ 
     cacheable: true, 
     throttling: true, 
     multiple: { 
      enable: true, 
      maxSize : 5 
     }, 
     appender: { 
      el: '.ac-users' 
     }, 
     dropdown: { 
      el: '#multipleDropdown' 
     }, 
     getData: function (value, callback) { 

      callback(value,getAjaxDropdowValuesAutocomplete(value)); 
     } 
}); 

समारोह डीबी से मूल्यों को प्राप्त करने के लिए:

function getAjaxDropdowValuesAutocomplete(value){ 
     var returnArray = [], 
     dataArray, 
     innerObject = {}, 
     postParamsObj = {"search" : value}; 

     $.ajax({ 
      type: "POST", 
      url: '/search-elements', 
      data: postParamsObj, 
      success: function(msg) { 
       dataArray = msg['data']; 

       for(var i = 0;i < dataArray.length; i++){ 
        innerObject = {}; 
        innerObject["id"] = dataArray[i][0]; 
        innerObject["text"] = dataArray[i][1] + " " + dataArray[i][2]; 
        returnArray.push(innerObject); 
       } 

       // returnArray format [{ 'id': '1', 'text': 'Johnny Bravo' }]  

      }, 
      error : function(msg){ 
      } 
     }); 

    return returnArray; 
} 

उत्तर

0

आप ajax अनुरोध के बजाय दूसरी तरह के आसपास की सफलता कॉलबैक दौरान स्वत: पूर्ण आरंभ की कोशिश कर सकते। इस तरह से आप स्वत: पूर्ण घटनाओं को बाध्यकारी शुरू करने से पहले डेटा रखना सुनिश्चित कर सकते हैं। जैसे

function getAjaxDropdowValuesAutocomplete(value) { 
    var returnArray = [], 
     dataArray, 
     innerObject = {}, 
     postParamsObj = {"search": value}; 

    $.ajax({ 
     type: "POST", 
     url: '/search-elements', 
     data: postParamsObj, 
     success: function (msg) { 
      dataArray = msg['data']; 

      for (var i = 0; i < dataArray.length; i++) { 
       innerObject = {}; 
       innerObject["id"] = dataArray[i][0]; 
       innerObject["text"] = dataArray[i][1] + " " + dataArray[i][2]; 
       returnArray.push(innerObject); 
      } 
      // returnArray format [{ 'id': '1', 'text': 'Johnny Bravo' }] 
      autocomplete = $('#multipleInput').materialize_autocomplete({ 
       cacheable: true, 
       throttling: true, 
       multiple: { 
        enable: true, 
        maxSize: 5 
       }, 
       appender: { 
        el: '.ac-users' 
       }, 
       dropdown: { 
        el: '#multipleDropdown' 
       }, 
       getData: returnArray 
      });  

     }, 
     error: function (msg) { 
     } 
    }); 

    return returnArray; 
} 
+0

यह समाधान ठीक काम करेगा, लेकिन यह अक्षम है क्योंकि यह हर बार डेटा अनुरोध भेजे जाने पर प्लगइन को नष्ट और प्रारंभ करता है। एक विधि getData है जो डेटा को असीमित रूप से लाने के लिए है, लेकिन मुझे कुछ गलत करना होगा क्योंकि यह –

+0

को पूरा करने के अनुरोध की प्रतीक्षा नहीं करता है, मुझे लगता है कि एक थ्रॉटलिंग विकल्प है: थ्रॉटलिंग [बूलियन]: GetData फ़ंक्शन के लिए थ्रॉटलिंग या नहीं, डिफ़ॉल्ट: सच नहीं है कि यह – jwebb

+0

के रूप में काम करता है, तो आप सही हो सकते हैं, थ्रॉटलिंग विकल्प काम नहीं कर रहा है और इसमें कोई अतिरिक्त पैरामीटर नहीं है जैसे कि थ्रॉटल राशि –

संबंधित मुद्दे