2011-12-05 21 views
5

Estoy tratando de recuperar el autocompletado de Yahoo.jQuery: Yahoo Autocompletar/Autosuggest

url JSON de Yahoo es la siguiente: http://ff.search.yahoo.com/gossip?output=fxjson&command=query

Así que tengo:

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

y aquí está un ejemplo: http://jsfiddle.net/yQbdb/

Puede alguien detectar un error o qué estoy haciendo mal ? Deberia de funcionar.

Gracias

+0

guau, parece un error. – noob

Respuesta

1

Configuración output a jsonp funciona para mí.

Consulte example query para ver la estructura de la salida.

La explicación está debajo.

El código es 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); 

      } 
     }); 
    } 
}); 

Explicación:

Mediante el uso de jQuery dataType: "jsonp" espera que el formato de salida para estar en JSONP. Cuando realiza una llamada desde su código usando output: "fxjson" la URL se ve como this pero como puede ver, el resultado no es un JSONP válido, porque no se llamó a la devolución de llamada.

Por otro lado cuando se especifica output: "jsonp" la consulta parece this y como se puede ver la salida es una JSONP válida - la devolución de llamada se llama.

Has vinculado un ejemplo de Amazon en los comentarios. $.ajax() llamada allí intentará URL como this. La salida del servicio web de Amazon es JSONP válida, porque se llama a la devolución de llamada con todos los datos.

Así, el resultado es: servicios web de Yahoo tendrán formato de volver en JSONP si proporciona ?output=jsonp parámetro en la URL mediante la configuración de $.ajax() con output: "jsonp". El servicio web de Amazon devuelve este formato por defecto sin ningún parámetro adicional. Esta es una configuración específica del servicio web y debe consultarse con su documentación u otros recursos relacionados.

Información sobre JSONP disponible HERE.

+0

Bueno, es correcto, pero no tiene sentido para mí. ¿Puede por favor descomponerlo para que yo pueda usarlo en el futuro también? Porque imagino que estoy usando Autosuggest de eBay: http://anywhere.ebay.com/services/suggest/?q=test que no tiene salida, etc. Gracias – jQuerybeast

+0

@jQuerybeast El ajuste 'output' a' fxjson' estaba haciendo '$. ajax' enojado porque la devolución de llamada JSONP no se llamaba. Lo encontré agregando un controlador de errores a la llamada ajax. Luego traté de cambiar el 'output' y comenzó a funcionar. – kubetz

+0

JSONP recibe una llamada de dataType. Y en caso de que tenga que configurar el resultado para jsonp, ¿cómo funciona esto: http://jsfiddle.net/HaQTA/? – jQuerybeast

Cuestiones relacionadas