/ / Obteniendo JSONP vía jQuery - jquery, jsonp

Obteniendo JSONP a través de jQuery - jquery, jsonp

ACTUALIZACIÓN 1:

Esto es lo que obtengo en el navegador si escribo

http://www.remote_host.com/feed.php?callback=jsonpCallBack

{
"rss": {
"channels": [
{
"title": "title goes here",
"link": "http://www.remote_server.com/feed.php",
"description": "description goes here",
"items": [
{
"title": "item title goes here",
"link": "item link goes here",
"pubDate": "item date goes here",
"description": "item description goes here"
},
{
"title": "item title goes here",
"link": "item link goes here",
"pubDate": "item date goes here",
"description": "item description goes here"
},
{
"title": "item title goes here",
"link": "item link goes here",
"pubDate": "item date goes here",
"description": "item description goes here"
}
]
}
]
}
}

¿Así que esto no es jsonp?

PREGUNTA ORIGINAL:

Tengo la siguiente secuencia de comandos en la que estoy tratando de obtener datos json de un host remoto:

$(document).ready(function() {
get_json_feed();

function get_json_feed() {
$.ajax({
url: "http://www.remote_host.com/feed.php?type=json",
type: "GET",
dataType: "jsonp",
error: function(xhr, status, error) {
alert("error");
},
success: function(json) {
alert("success");
}
});
}
});

Pero por alguna razón estoy recibiendo un error y una advertencia:

Advertencia: Recurso interpretado como Script pero transferido con tipo MIME texto / html.

Error: Error de sintaxis no detectado: Símbolo inesperado :

¿Qué estoy haciendo mal?

Respuestas

7 para la respuesta № 1

El "protocolo" de JSONP se basa en el sitio que responde a su solicitud con una declaración de JavaScript del formulario,

 someFunction( someJSON )

El nombre de la función se suministra como unargumento de su código, con la idea de que el script de respuesta, una vez consumido e interpretado por el navegador, dará como resultado una llamada a esa función con un blob analizado de JSON, es decir, un objeto JavaScript. La biblioteca jQuery realizará parte del trabajo de registro por usted, incluso en la medida en que cree la función de ámbito global para llamar (que será un código que solo llama a la devolución de llamada que proporciona como el argumento de "éxito").

Por lo tanto, debe verificar cómo se ve la respuesta real de ese servidor. Me parece que puede no ser un servidor preparado para responder de esa manera. Tú podría es necesario asegurarse de que haya un parámetro adicional en su URL, de la forma "devolución de llamada =?".


6 para la respuesta № 2

No sé exactamente qué error está enfrentando, pero hay algunos consejos útiles para usar jsonp aquí

  • error: Este controlador no se llama para secuencias de comandos de dominio cruzado y solicitudes JSONP.
  • escribir jsonp: "callback", jsonpCallback: "jsonpCallback" en los parámetros ajax. Ajuste jsonp para devolver la llamada y luego configurar jsonpCallback to jsonpCallback hace que la cadena de consulta se vea así:

    http://domain.com/jsonp-demo.php?callback=jsonpCallback&name=watever

  • Cargas en un bloque JSON utilizando JSONP. Agregará un extra ?callback=? hasta el final de su URL para especificar la devolución de llamada.

Su guión completo se vería así:

<script>
$(document).ready(function(){

$("#useJSONP").click(function(){
$.ajax({
url: "http://domain.com/jsonp-demo.php",
data: {name: "Chad"},
dataType: "jsonp",
jsonp: "callback",
jsonpCallback: "jsonpCallback",
success: function(){
alert("success");
}
});
});

});

function jsonpCallback(data){
$("#jsonpResult").text(data.message);
}
</script>

Ejemplo aquí


3 para la respuesta № 3

Parece que el servidor devuelve el encabezado de tipo de contenido incorrecto.