Estoy tratando de obtener el feed de un sitio web de noticias. Pensé que usaría la API de feeds de Google para convertir el feed de feedburner en json. La siguiente URL devolverá 10 publicaciones del feed, en formato json. http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://feeds.feedburner.com/mathrubhumi
Usé el siguiente código para obtener el contenido de la URL anterior
$.ajax({ type: "GET", dataType: "jsonp", url: "http://ajax.googleapis.com/ajax/services/feed/load", data: { "v": "1.0", "num": "10", "q": "http://feeds.feedburner.com/mathrubhumi" }, success: function(result) { //..... } });pero no funciona y me sale el siguiente error
XMLHttpRequest no puede cargar http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http%3A%2F%2Ffeeds.feedburner.com%2Fmathrubhumi . No hay ningún encabezado 'Access-Control-Allow-Origin' en el recurso solicitado. Por lo tanto, no se permite el acceso al origen ' http://localhost '.
¿Cómo puedo solucionar esto?
Si usa el navegador Google Chrome, puede hackear con una extensión.
Puede encontrar una extensión de Chrome que modificará los encabezados CORS sobre la marcha en su aplicación. Obviamente, esto es solo para Chrome, pero me gusta que funcione con cero cambios en cualquier lugar.
Puede usarlo para depurar su aplicación en una máquina local (si todo funciona en producción).
Aviso : si la URL se rompe, el nombre de la extensión es Access-Control-Allow-Origin: * . Te recomiendo que deshabilites esta extensión cuando no estés trabajando en tus cosas, porque, por ejemplo, YouTube no funciona con esta extensión.
Creo que esto podría deberse a que Chrome no es compatible con localhost para pasar por Access-Control-Allow-Origin ; consulte el problema de Chrome
Para que Chrome envíe Access-Control-Allow-Origin en el encabezado, simplemente haga un alias de su host local en su archivo /etc/hosts a algún otro dominio, como:
127.0.0.1 localhost yourdomain.com Luego, si accede a su secuencia de comandos usando yourdomain.com en lugar de localhost , la llamada debería tener éxito.
Pruebe esto: configure la llamada Ajax configurando el encabezado de la siguiente manera:
var uri = "http://localhost:50869/odata/mydatafeeds" $.ajax({ url: uri, beforeSend: function (request) { request.setRequestHeader("Authorization", "Negotiate"); }, async: true, success: function (data) { alert(JSON.stringify(data)); }, error: function (xhr, textStatus, errorMessage) { alert(errorMessage); } });Luego ejecute su código abriendo Chrome con la siguiente línea de comando:
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security