2011-12-05 23 views
5

Sto cercando di recuperare il completamento automatico di yahoo.jQuery: Yahoo Autocomplete/Autosuggest

JSON url di Yahoo è questo: http://ff.search.yahoo.com/gossip?output=fxjson&command=query

Così ho:

$("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]) 
       } 
      }) 
     } 
    }); 

Ed ecco un esempio: http://jsfiddle.net/yQbdb/

Qualcuno può individuare un errore o quello che sto facendo male ? Dovrebbe funzionare.

Grazie

+0

wow, sembra un insetto. – noob

risposta

1

Impostazione output a jsonp funziona per me.

Vedere example query per la struttura dell'output.

La spiegazione è di seguito.

Il codice è 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); 

      } 
     }); 
    } 
}); 

Spiegazione:

Utilizzando dataType: "jsonp" jQuery si aspetta il formato di output di essere in JSONP. Quando effettui una chiamata dal tuo codice utilizzando output: "fxjson", l'URL è simile a this ma come puoi vedere l'output non è un JSONP valido, perché la richiamata non è stata chiamata.

D'altra parte quando si specifica output: "jsonp" la query sembra this e come si può vedere l'output è un JSONP valida - la richiamata è stato chiamato.

Hai collegato un esempio Amazon nei commenti. Chiamata $.ajax() proverà a URL come this. L'output dal servizio web di Amazon è JSONP valido, poiché la richiamata viene richiamata con tutti i dati.

Quindi il risultato è: i servizi Web di Yahoo restituiranno il formato in JSONP se si fornisce il parametro ?output=jsonp nell'URL configurando $.ajax() con output: "jsonp". Il servizio web di Amazon restituisce questo formato per impostazione predefinita senza parametri aggiuntivi. Questa è una configurazione specifica del servizio web e deve essere consultata con la sua documentazione o altri risorse correlate.

Informazioni su JSONP disponibile HERE.

+0

Beh, è ​​corretto ma non ha senso per me. Puoi dirlo a me, quindi posso usarlo anche in futuro? Perché immagino di usare l'autosuggest di eBay: http://anywhere.ebay.com/services/suggest/?q=test che non ha output ecc. Grazie – jQuerybeast

+0

@jQuerybeast L'impostazione di 'output' a' fxjson' stava facendo '$. ajax' arrabbiato perché il callback JSONP non veniva richiamato. L'ho trovato aggiungendo un gestore di errori alla chiamata ajax. Poi ho provato a cambiare l'output e ha iniziato a funzionare. – kubetz

+0

JSONP viene chiamato da dataType. E nel caso dovessi impostare l'output su jsonp come funziona: http://jsfiddle.net/HaQTA/? – jQuerybeast

Problemi correlati