js no funciona en Chrome pero funciona en IE [duplicado]

Tengo un código JS que funciona en el navegador IE. Pero no funciona en Chrome y Mozilla. ¿Qué se debe cambiar para que funcione en estos navegadores?

<html>
<head>
<script type="text/javascript">
function readFile(url) {
    pageRequest = new XMLHttpRequest()
    pageRequest.open("GET", url, false);
    pageRequest.send(null);

    return pageRequest.responseText;    
}
</script>
</head>

<body>
<script type="text/javascript">
    var txt = readFile("?GameID=5&from=0&num=50000");
    document.write(txt);
</script>
</body>

</html>






function readFile(url) {
    var request = new XMLHttpRequest();
    request.open("GET", url, false);
    request.send();

    return request;
}

var request = readFile("http://? GameID=5&from=0&num=50000");

request.onload = function() {
    document.write(request.responseText);
};

este código no funciona ni en IE ni en Chrome)) alguna otra idea?

preguntado el 03 de diciembre de 13 a las 13:12

Bienvenido a desbordamiento de pila. Parece que has caído en la trampa del clásico problema asincrónico: consulta ¿Cómo devolver la respuesta de una llamada AJAX? para obtener más información sobre este tema. -

probablemente necesite un punto y coma....pageRequest = new XMLHttpRequest(); -

@MonkeyZeus: no tiene nada que ver con eso, aunque personalmente uso puntos y comas cuando es necesario (sin ASI). -

@ Qantas94Heavy No confío en los puntos y comas perdidos, nunca. -

Si su IE tiene más de 7 años, deberá usar ActiveX para su solicitud. -

2 Respuestas

Esto ocurre debido al uso compartido de recursos entre orígenes, haga clic en aquí para más detalles. Debe configurar el encabezado Access-Control-Allow-Origin en el servidor y definir los dominios que tienen permisos para acceder al recurso. Probé su código en un servidor con Internet Explorer y obtuve el mismo error.

Respondido el 03 de diciembre de 13 a las 16:12

Tienes problemas de sincronización. Si la solicitud HTTP aún no finalizó, no podrá acceder request.responseText. Esto podría funcionar en algunos navegadores por pura casualidad. Así que tenemos que adjuntar un onload oyente de eventos.

Pruebe este código:

function readFile(url) {
    var request = new XMLHttpRequest();
    request.open("GET", url, false);
    request.send();

    return request;
}

var request = readFile("http://example.com/displayScore.php?GameID=5&from=0&num=50000");

request.onload = function() {
    document.write(request.responseText);
};

También podrías pasar readFile un segundo parámetro que es una función como esta en lugar de devolver el objeto completo:

function readFile(url, onload) {
    //load code goes here...

    if (typeof onload == "function") {
        request.onload = function(){
            onload(request),
        };
    }
}

readFile("url", function(e){
    document.write(e.responseText);
});

Respondido el 06 de diciembre de 13 a las 20:12

Y gtl.hig.no tiene que ser su propio dominio, de lo contrario obtendrá errores de 'Access-Control-Allow-Origin' en Chrome. - ruben-j

@ Ruben-J buen punto, a menos que el sitio web permita el uso compartido de recursos de origen cruzado (CORS). - Sheng

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.