2012-06-08 23 views
6

मैं सर्वर पर AJAX कॉल का उपयोग कर इनपुट स्ट्रिंग को पूरा करने के लिए सुझाव प्राप्त करने के लिए jQuery-autocomplete plugin का उपयोग कर रहा हूं। साथ ही, सर्वर परिणामों को वापस क्रम में लौटने का ख्याल रखता है, जिसे मैं उन्हें दिखाना चाहता हूं लेकिन स्वत: पूर्ण उन्हें एक अलग क्रम में दिखाता है।jQuery के स्वत: पूर्ण आदेश

मैं आउटपुट को पुन: व्यवस्थित करने के लिए jQuery स्वत: पूर्ण कैसे कॉन्फ़िगर कर सकता हूं? मुझे क्लाइंट के अंत में किसी प्रकार की प्रसंस्करण की आवश्यकता नहीं है क्योंकि डेटा को पहले ही रैंक/क्रमबद्ध किया गया है।

+0

"ऑटो पूर्ण उन्हें एक अलग क्रम में दिखाता है" का क्या मतलब है? – Shyju

+0

मेरा मतलब है कि ड्रॉपडाउन में प्रदर्शित तारों का क्रम सर्वर द्वारा लौटाया गया है, (जो दस्तावेजों में दिए गए अनुसार वर्णों के अलग-अलग अनुक्रम "\ n" की एक स्ट्रिंग है)। – rajatkhanduja

उत्तर

8

खैर, यह पता चला सरल से मैंने सोचा था कि हो सकता है। मैंने प्लगइन के कोड को पढ़ने का फैसला किया और मेरे आउटपुट को टाइप करने वाले कोड को टिप्पणी करके इसे संशोधित किया।

वह तब होता है जब मुझे डिफ़ॉल्ट में 'sortResults: true' एक चर मिला। तो, मुझे बस इतना वैरिएबल सेट करने के लिए जरूरी था। हालांकि मुझे दस्तावेज में यह नहीं मिला।

$('#search').autocomplete ({ url: "index.php", sortResults: false })

अब उत्पादन सटीक क्रम है कि मैं की आवश्यकता है। jQuery "Autocomplete" plugin is messing up the order of my data (उसी प्लगइन नहीं है)

धन्यवाद:

मुझे लगता है/यहाँ से समस्या को हल करने कोड को पढ़ने का विचार आया। :)

+0

बढ़िया! अपने उत्तर को स्वीकार करना न भूलें :) –

+0

निश्चित रूप से 48 घंटों के बाद ऐसा करेगा। – rajatkhanduja

+0

यह उतना ही अधिक है, सर्वर से प्री-प्रोसेस किए गए परिणाम को क्लाइंट साइड करने के बजाय प्रदर्शित करना इतना आसान है। +1 – Andreas

18

बस इसे स्वत: पूर्ण करने के लिए सर्वर परिणामों को सॉर्ट करना इसे करना चाहिए।

तो इससे पहले कि आप $return_arr

पर sort() फ़ंक्शन का उपयोग echo json_encode($return_arr); तुम भी कुछ इस तरह की कोशिश कर सकते हैं:

तर्क मैचों की एक सरणी है कि इस शब्द के साथ शुरू बनाने के लिए है, और फिर संक्षेप में कि उन मैचों के साथ जिसमें शब्द शामिल है लेकिन इसके साथ शुरू नहीं होता है।

$(document).ready(function() { 
    var source = ['Adam', 'Benjamin', 'Matt', 'Michael', 'Sam', 'Tim']; 
    $("input").autocomplete({ 
     source: function (request, response) { 
      var term = $.ui.autocomplete.escapeRegex(request.term) 
       , startsWithMatcher = new RegExp("^" + term, "i") 
       , startsWith = $.grep(source, function(value) { 
        return startsWithMatcher.test(value.label || value.value || value); 
       }) 
       , containsMatcher = new RegExp(term, "i") 
       , contains = $.grep(source, function (value) { 
        return $.inArray(value, startsWith) < 0 && 
         containsMatcher.test(value.label || value.value || value); 
       }); 

      response(startsWith.concat(contains)); 
     } 
    }); 
}); 

उदाहरण:http://jsfiddle.net/zkVrs/

स्रोत:https://stackoverflow.com/a/8302996/973155

+1

'सर्वर परिणाम को वापस क्रम में लौटने का ख्याल रखता है, जिसे मैं उन्हें दिखाना चाहता हूं लेकिन स्वत: पूर्ण उन्हें एक अलग क्रम में दिखाता है। ऐसा लगता है जैसे ओपी पहले से ही ऐसा कर रहा है। – Dennis

+0

http://stackoverflow.com/a/8302996/277923 मैंने इसे उपर्युक्त लिंक से पढ़ा है, लेकिन मैं यह समझने में असमर्थ हूं कि मैं इसे 'सॉर्टिंग' करने के लिए कैसे उपयोग कर सकता हूं।मैं AJAX कॉल द्वारा दिए गए क्रम में परिणाम दिखाने के लिए jQuery-स्वत: पूर्ण करना चाहता हूं। – rajatkhanduja

+1

अपना कोड साझा करें। –

1

चूंकि jQuery सॉक्रॉम्प्लेट प्लगइन के वर्तमान निर्माण में कोई सॉर्ट नहीं है, इसलिए मुझे इस समस्या का एक और समाधान खोजना पड़ा और प्लगइन सॉर्टिंग परिणाम का एकमात्र कारण यह पता चला कि हर बार सर्वर प्रतिक्रिया सामान्यीकृत की जा रही है वस्तुओं के साथ शुद्ध सरणी {लेबल: ..., मान: ...}।

PHP का उपयोग आपके उपयोग की भाषा के रूप में, json_encode (array_values ​​($ your_array)); चाल करना चाहिए।

+0

धन्यवाद @sKopheK का उपयोग कर रहा था! बस स्पष्ट करने के लिए, इसे स्रोत फ़ंक्शन के प्रतिक्रिया पैरामीटर पर प्रदान करें: '[{लेबल:" सुझाव ", मान:" सुझाव "},]' - यह नहीं: '[" सुझाव ",]' – joeymink

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