2013-12-03 4 views
-1

У меня есть JS-код, который работает в браузере IE. Но это не работает в Chrome и Mozilla. Что нужно изменить, чтобы заставить работать эти браузеры?js не работает в Chrome, но работает в IE

<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); 
}; 

этот код не работает ни в IE, ни в Chrome)) любые другие идеи?

+8

Wlecome to [so]. Похоже, что вы попали в ловушку классической проблемы асинхронизации - см. [Как вернуть ответ на вызов AJAX?] (Http://stackoverflow.com/questions/14220321/how-to-return-the -response-from-a-ajax-call) для получения дополнительной информации по этой проблеме. –

+0

, вероятно, нужна полуколонна .... 'pageRequest = new XMLHttpRequest();' – MonkeyZeus

+1

@MonkeyZeus: это не имеет к этому никакого отношения, хотя я лично использую точки с запятой, где это необходимо (без ASI). –

ответ

0

У вас проблемы с асинхронностью. Если HTTP-запрос еще не завершился, вы не сможете получить доступ к request.responseText. Это может работать в некоторых браузерах из-за чистой случайности. Поэтому мы должны подключить прослушиватель событий onload.

Попробуйте этот код:

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); 
}; 

Вы также мог бы пройти readFile второй параметр, который является функцией, как это вместо того, чтобы вернуться весь объект:

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); 
}); 
+0

И gtl.hig.no должен быть вашим собственным доменом, иначе вы получите ошибки Access-Control-Allow-Origin в chrome. –

+1

@ Ruben-J хорошая точка, если только веб-сайт не разрешает совместное использование ресурсов Cross-Origin (CORS). – sheng

+0

Точно, согласовано –

1

Это происходит из-за перекрестное происхождение Совместное использование ресурсов, нажмите here для получения более подробной информации. Вам необходимо установить заголовок Access-Control-Allow-Origin на сервере и определить домены, имеющие разрешения на доступ к ресурсу. Я проверил ваш код на сервере с Internet Explorer и получил ту же ошибку.

Смежные вопросы