XMLHttpRequest no puede cargar no está permitido por Access-Control-Allow-Origin

2 minutos de lectura

avatar de usuario
usuario2495586

Estoy tratando de obtener acceso a los datos de la API de education.com. Sin embargo, sigo recibiendo un error, el error dice:

XMLHttpRequest no puede cargar
http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Resf=json. El origen no está permitido por Access-Control-Allow-Origin.

Mi código es el siguiente:

$(function(){
    $.getJSON('http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Resf=json', 
    function(data) {
        console.log(data);
    });
});

¿Puede alguien ayudarme por favor?

  • ¿Esa API acepta un parámetro de devolución de llamada jsonp? no parece actualmente. Si no es así, no puede solicitarlo usando solo el navegador.

    – Kevin B.

    18 de junio de 2013 a las 3:29

  • esto es muy completo 3 soluciones simples

    – Jorge

    23 de agosto de 2013 a las 9:47

  • Pruebe entre dominios… verifique pureexample.com/jquery/cross-domain-ajax.html

    – Rey Jinete

    15 de abril de 2016 a las 15:16

avatar de usuario
SALMÁN

un artículo sobre AJAX de dominio cruzado tema hace un tiempo aquí:

SOLICITUD AJAX DE DOMINIO CRUZADO CON RESPUESTA JSON PARA IE, FIREFOX, CHROME, SAFARI – JQUERY

La forma más fácil de manejar esto si tiene el control del servidor que responde es agregar un encabezado de respuesta para:

Access-Control-Allow-Origin: *

Esto permitirá AJAX de dominio cruzado. En PHP querrás modificar la respuesta así:

<?php header('Access-Control-Allow-Origin: *'); ?>

simplemente puede poner la configuración de Header set Access-Control-Allow-Origin * en apache conf o archivo htaccess, simplemente funciona a la perfección

Nota IMPORTANTE:

El comodín permitirá que cualquier dominio envíe solicitudes a su host. Recomiendo reemplazar el asterisco con un dominio específico en el que ejecutará scripts.

  • Desafortunadamente, no tengo el control del servidor que responde. :/

    – usuario2495586

    18 de junio de 2013 a las 3:55

No puede hacer esto con un navegador a menos que el servidor de education.com esté configurado para permitir CORS (Cross-Origin Resource Sharing) solicitudes (Ese es el Access-Control-Allow-Origin un poco).

Sin embargo, su servidor podría realizar la solicitud en su nombre y luego puede recuperar los datos desde allí.

En ZF1 se puede hacer de la siguiente manera:

  public function indexAction() {
    $turnkey = array(
        "uris" => array("176.x.x:3478", "3478"),
        "username" => "my_username",
        "password" => "my_password"
    );

    $content = Zend_Json::encode($turnkey);
    $this->getResponse()
            ->setHeader('Access-Control-Allow-Origin', "*")
            ->setHeader('Content-Type', 'application/json')
            ->setBody($content)
            ->sendResponse();
    exit;
  }

No es tanto una solución al problema, sino un truco para evitar el problema: inicie su navegador sin seguridad web:

in MacOS this would work as follows: cd to ../../Applications/Google\ Chrome.app/Contents/MacOS
then start the brwoser with the appropiate flag: Google\ Chrome --disable-web-security'

Nota: nunca use el navegador para navegar normalmente, ¡esto es solo para ayudarlo en casos de emergencia! Salud

¿Ha sido útil esta solución?