2013-03-05 11 views
9

पर आधारित फ़िल्टरिंग नतीजे नहीं दे रहा है मैं चयन 2 के लिए नया हूं और मुझे AJAX को एकीकृत करने में समस्या आ रही है। जब मैं खोज करता हूं, तो क्वेरी के आधार पर परिणाम फ़िल्टर नहीं किए जा रहे हैं।चयन 2 अजाक्स क्वेरी

यहां यह कैसा दिखता है: http://i.imgur.com/dAPSSDH.png - सही वर्ण परिणामों में रेखांकित हैं, लेकिन कुछ भी फ़िल्टर नहीं किया गया है। मेरे गैर-AJAX Select2 में और मैंने जो उदाहरण देखा है, में फ़िल्टरिंग कुछ हद तक स्वचालित रूप से प्रतीत होती है, इसलिए मुझे एक कस्टम फ़िल्टर लिखने में संकोच नहीं है क्योंकि शायद पहले से ही बेहतर बनाया गया है।

यहाँ मेरी कोड है:

<script> 
    $("#search_bar").select2({ 
    placeholder: "Search for another Concept", 
    minimumInputLength: 1, 
    ajax: { // instead of writing the function to execute the request we use Select2's convenient helper 
     url: "/concepts/names_for_search", 
     dataType: 'json', 
     data: function (term, page) { 
     return { 
     q: term, // search term 
     page: page 
     }; 
     }, 
     results: function (data, page) { 
     return { results: data}; 
     } 
    }, 
    }); 
</script> 

इसके अलावा, यहां मेरे JSON का एक उदाहरण है:

[{"id":1,"text":"Limits"},{"id":2,"text":"Derivatives"},{"id":3,"text":"One-Sided Limits"},{"id":4,"text":"Formal Definition of a limit"}] 

कोई भी विचार? उम्मीद है कि मैं बस कुछ बेवकूफ कर रहा हूं और यह एक त्वरित फिक्स है। किसी भी सहायता के लिए अग्रिम रूप से धन्यवाद।

+1

काश भी यह करने के लिए एक बेहतर तरीका नहीं था! मुझे फ़िल्टरिंग करने के लिए सर्वर पर जाने के लिए सहज नहीं लगता है, अगर मेरे पास पहले से ही सभी पंक्तियां हैं! –

उत्तर

9

आपको परिणामों को फ़िल्टर करने के लिए सर्वर पक्ष पर एक कस्टम फ़िल्टर लिखना होगा। बॉक्स में आप जो टाइप करते हैं उसे 'टर्म' में सहेजा जाता है और फिर 'q' को AJAX कॉल के साथ अनुरोध पैरामीटर के रूप में भेजा जाता है। तो AJAX कॉल
यूआरएल: "/ अवधारणाओं/नाम_for_search? Q = deri"
केवल फ़िल्टर किए गए परिणाम लौटाएंगे और सभी परिणामों को नहीं।

अद्यतन
Select2 एक AJAX हर बार जब आप खोज बॉक्स में टाइप फोन कर देगा। आपको परिणामों को सर्वर पक्ष पर फ़िल्टर करना होगा और फिर खोज बॉक्स में टेक्स्ट के आधार पर परिणाम वापस करना होगा।
मैं

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    String searchTerm = request.getParameter("q"); 

    String json = getOptions(searchTerm); 
    //getOptions method will return a string of in JSON format 
    //[{"id":"1","name":"Derivatives"}] 
    response.getWriter().write(json); 
} 

नीचे के रूप में अपने JSP/Servlet आवेदन में यह उपयोग कर रहा हूँ अपने जावा स्क्रिप्ट कोड सही है।

मैंने पाया कि चयन 2 का उपयोग है। यदि आप http://www.indiewebseries.com/search?q=ind और http://www.indiewebseries.com/search?q=in लिंक खोलते हैं तो प्राप्त परिणाम अलग-अलग हैं और 'q' पैरामीटर पर आधारित हैं।
आप मामले में रहते हुए, कॉल के लिए परिणाम URL को '/ अवधारणाओं/names_for_search? Q = घ' और '/ अवधारणाओं/names_for_search? Q = देरी' ही कर रहे हैं (यानी फ़िल्टर नहीं)

+0

हे धन्यवाद और खेद है कि यह प्रतिक्रिया बहुत देर हो चुकी है। क्या उनके फ़िल्टर का दोबारा उपयोग करने का कोई तरीका है जैसे कि मैं AJAX नहीं कर रहा था (शायद उनके स्रोत कोड से प्रतिलिपि/चिपकाना)? साथ ही, क्या आप किसी भी उदाहरण के बारे में जानते हैं जो आप मुझे इंगित कर सकते हैं? लाइट-गुगलिंग आश्चर्यजनक रूप से कम हो गई है। आपकी मदद के लिए बहुत बहुत धन्यवाद - एक बार जब मैं लोगों को उखाड़ फेंकने में सक्षम हूं, तो आपको निश्चित रूप से एक मिल जाएगा। –

+1

@MichaelNomitch - मैंने जवाब अपडेट किया है। उम्मीद है की यह मदद करेगा। – darsheets

2

यह सवाल पूछा गया था github परियोजना पर और जवाब था: सर्वर पक्ष पर फ़िल्टर करें। डिफ़ॉल्ट फ़िल्टर समारोह जब AJAX नहीं किया जाता है कहा जाता है matcher पैरामीटर पर Select2 दस्तावेज में मौजूद है:

function(term, text) { return text.toUpperCase().indexOf(term.toUpperCase())>=0; } 
संबंधित मुद्दे