2011-12-05 8 views
5

私はyahooのオートコンプリートを取得しようとしています。jQuery:Yahoo Autocomplete/Autosuggest

YahooのJSONのURLはこれです:だから私は持っているhttp://ff.search.yahoo.com/gossip?output=fxjson&command=query

$("selector").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
       url: "http://ff.search.yahoo.com/gossip", 
       dataType: "jsonp", 
       data: { 
        "output" : "fxjson", 
        "command" : request.term 
       }, 
       success: function(data) { 
        response(data[1]) 
       } 
      }) 
     } 
    }); 

そして、ここでは一例です:http://jsfiddle.net/yQbdb/

誰かが間違いか何私は私が間違ってやっているを見つけることができます?それは動作するはずです。私のためoutputjsonpに作品を設定する

おかげ

+0

うわー、バグのようです。 – noob

答えて

1

出力の構造については、example queryを参照してください。

説明は以下のとおりです。

コードはHEREです。

$("#wd6450").autocomplete({ 
    source: function(request, response) { 
     $.ajax({ 
      url: "http://ff.search.yahoo.com/gossip", 
      dataType: "jsonp", 
      data: { 
       "output": "jsonp", 
       "command": request.term 
      }, 
      success: function(data) { 
       var suggestions = []; 
       // for each element in the data.gossip.results array ... 
       $.each(data.gossip.results, function(i, val) { 
        // .. push the value of the key inside our array 
        suggestions.push(val.key); 
       }); 
       // call response with our collected values 
       response(suggestions); 

      } 
     }); 
    } 
}); 

説明:

dataType: "jsonp"のjQueryを使用することにより、出力フォーマットはJSONPであることを期待。 output: "fxjson"を使用してコードを呼び出すと、URLはthisのようになりますが、出力が有効なJSONPではないことがわかります。コールバックが呼び出されなかったためです。一方

あなたがoutput: "jsonp"を指定すると、クエリがthisのように、あなたは出力が有効JSONPで見ることができるようになります - コールバックが呼び出されました。

Amazonの例をコメントにリンクしました。 $.ajax()を呼び出すと、thisのように表示されます。 AmazonのWebサービスからの出力は有効なJSONPです。コールバックがすべてのデータで呼び出されるためです。

だから、結果は次のとおりです。あなたがoutput: "jsonp"$.ajax()を設定することで、URLに?output=jsonpパラメータを提供する場合ヤフーのWebサービスはJSONP形式を返します。 Amazonのwebserviceは、デフォルトではこのパラメータを特別なパラメータなしで返します。これはウェブサービス固有の設定であり、そのドキュメンテーションまたは他の関連するリソース担当者と相談しなければなりません。

JSONPについての情報HERE

+0

それは正しいですが、それは私には意味がありません。将来私も使うことができるので、私にそれを分けてもらえますか?私はebayの自動尋問を使用していると想像しています。出力がないなどの理由で、http://anywhere.ebay.com/services/suggest/?q=testです。 – jQuerybeast

+0

@jQuerybeast 'fxjson'に' output'を設定すると '$。 JSONPコールバックが呼び出されなかったので、「ajax'は怒っています。私はエラーハンドラをajax呼び出しに追加することでそれを見つけました。それから私は 'output'を変更しようとしました、そして、それは働き始めました。 – kubetz

+0

JSONPがdataTypeから呼び出されています。そして、あなたがjsonpに出力を設定しなければならなかった場合は、どうすればこの作業ができますか:http://jsfiddle.net/HaQTA/? – jQuerybeast