2014-04-30 13 views
6

के साथ टाइपहेड का उपयोग करके मैं ट्विटर के टाइपहेड + ब्लडहाउंड को Google के सीएसई के साथ काम करने की कोशिश कर रहा हूं।Google कस्टम सर्च इंजन

अभी तक, मैं परिणाम लौटने में कामयाब रहा हूं, लेकिन मैं डेटामोकनाइज़र को काम करने में सक्षम नहीं हूं।

var results = new Bloodhound({ 
    datumTokenizer: function(data) { 
    return Bloodhound.tokenizers.whitespace(d.value) 
    }, 
    queryTokenizer: Bloodhound.tokenizers.obj.whitespace, 
    remote: { 
    url: "http://clients1.google.com/complete/search?client=partner&hl=en&sugexp=gsnos%2Cn%3D13&gs_rn=25&gs_ri=partner&partnerid=004914516364918182382%3Ayfqw09r4qvu&types=t&ds=cse&cp=3&gs_id=15&q=%QUERY&callback=showResults&duffCallback=?", 
    ajax: $.ajax({type:'GET',dataType:'jsonp',jsonp:'duffCallback'}), 
    filter: showResults 
    } 
}); 

बेला देखें: http://jsfiddle.net/thugsb/3KAjh/

आप देखेंगे कि मैं परिणाम showResults() एक सरणी के रूप में से लौटाए जाने मिल गया है। हालांकि, filter: से रीसेट्स() दिखाने के लिए कॉल कुछ भी नहीं कर रहा है, क्योंकि उस रेखा को हटाने से कोई प्रभाव नहीं पड़ता है। तो मुझे पूरा यकीन नहीं है कि क्या हो रहा है।

नोट करें डफ कॉलबैक मैंने this question पढ़ने से करने के लिए किया है। अगर यह काम करने का एक बेहतर तरीका है तो मैं सभी कान हूं!

उत्तर

7

सबसे पहले आप जिस डाटामोकनाइज़र का उपयोग कर रहे थे वह बिल्कुल सही नहीं था। कैसे "खाली स्थान के" समारोह अब के बजाय "डी" जो आप उपयोग कर रहे थे "डाटा" इनपुट पैरामीटर संदर्भित कर रहा है

datumTokenizer: function(data) { 
return Bloodhound.tokenizers.whitespace(data.value) 
} 

ध्यान दें: आप करने के लिए इसे बदलने की जरूरत है।

आपकी समस्या का समाधान आ, यह देखना यहाँ काम (उदाहरण के लिए "एथलेटिक्स" के लिए खोज की कोशिश) के लिए के रूप में:

http://jsfiddle.net/Fresh/FYavC/

अपने कोड के साथ मुख्य समस्या यह है अपने रिमोट यूआरएल में था (और यह मुझे भी उलझन में था!)। अपमानजनक क्वेरी स्ट्रिंग पैरामीटर हैं:

...&callback=showResults&duffCallback=? 

"duffCallback =?" AJAX ऑब्जेक्ट में "datatype:'jsonp'" निर्दिष्ट करने के रूप में आवश्यक नहीं है, jsonp अनुरोध द्वारा उपयोग किए गए कॉलबैक विवरण (यानी "? कॉलबैक =?") स्वचालित रूप से जोड़ता है। इसके अलावा "कॉलबैक = शो रेसल्ट्स" की आवश्यकता नहीं है क्योंकि एक सफल जेसनपी अनुरोध किए जाने पर फ़िल्टर विधि को ब्लडहाउंड फ्रेमवर्क द्वारा स्पष्ट रूप से बुलाया जाता है।

मैं मानता हूं कि यह स्पष्ट नहीं है कि Typeahead.js का उपयोग करते समय रिमोट कॉल कैसे किए जाने चाहिए। रिमोट कॉल का एक उदाहरण जहां AJAX ऑब्जेक्ट निर्दिष्ट है और कुछ दस्तावेज Typeahead.js वेबसाइट पर उपयोगी होंगे!

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