javascript - Error de devolución de solicitud JSONP: "Uncaught SyntaxError: Token inesperado:"
ajax jquery (2)
Así que estoy tratando de hacer una solicitud a la API de Exchange Exchange con el siguiente código jQuery:
$.ajax({
type: ''POST'',
url: ''http://api.stackoverflow.com/1.1/stats'',
dataType: ''jsonp'',
success: function() { console.log(''Success!''); },
error: function() { console.log(''Uh Oh!''); }
});
Pero cuando abro el archivo en mi máquina, ya sea en Firefox o Chrome, y hago la solicitud, aparece este error:
Resource interpreted as Script but transferred with MIME type application/json.
Uncaught SyntaxError: Unexpected token :
Uh Oh!
No tengo ni idea de lo que está pasando. Sé que la API de Exchange Exchange Gzips sus respuestas, ¿esto causaría algún problema?
Debe configurar un parámetro no convencional para que la API SO funcione. En lugar de la callback
convencional, debe pasar un parámetro jsonp
.
Además, no puedes hacer POST
con JSONP.
$.ajax({
type: ''GET'',
url: ''http://api..com/1.1/stats'',
dataType: ''jsonp'',
success: function() { console.log(''Success!''); },
error: function() { console.log(''Uh Oh!''); },
jsonp: ''jsonp''
});
No es posible realizar AJAX de dominio cruzado utilizando la petición XMLHTTP convencional. Esto es por razones de seguridad (se llama la política del mismo origen).
Hay una solución. script
etiquetas de script
no están sujetas a esta restricción. Esto significa que puede insertar una etiqueta de script
en el documento que llama a una URL. Si define una función accesible en todo el mundo en su secuencia de comandos y le dice al servidor remoto cómo se llama esa función, el servidor puede pasar el código que envuelve los datos que se enviarán en una llamada a esa función.
La dificultad que tuvo aquí es con la API . Convencionalmente, usaría el argumento de callback
en su solicitud, para decirle al servidor cómo se llama su función. Sin embargo, la API de le pide que use el parámetro jsonp
lugar.
Pruebe esta URL: http://api..com/1.1/stats?jsonp=callme
"callme" es el nombre de su función de devolución de llamada, en su NOMBRE DE NOMBRE GLOBAL (objeto de ventana).
Por cierto, si está ejecutando Firefox y tiene el complemento JSONView instalado, puede probar la URL anterior (y la suya para comparación) directamente.
Resultado de llamar a la URL:
callme({
"statistics": [
...
]
})