2013-09-10 4 views
0

Вот мой простой веб-страницы:Как создать надлежащий запрос XHR в AJAX

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
    <body onload="start()"> 
    </body> 
</html> 

А вот мой XMLHttpRequest:

function start(){ 
    //Name the function that will perform request 
    var httpRequest; 

    //cross browser instance 
    if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
    httpRequest = new XMLHttpRequest(); 
    } else if (window.ActiveXObject){ //if IE 8 and older 
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    httpRequest.onreadystatechange = httpResult; //what to do after response 
    httpRequest.open("GET","http://data.mtgox.com/api/2/BTCUSD/money/ticker_fast?pretty", true); 
    httpRequest.send(); 

    function httpResult(){ 
    if (httpRequest.readyState === 4 && httpRequest.status === 200){ 
     alert(httpResult.responseText); 
    } else { 
     alert("problem making request"); 
    } 
    } 
} 

Когда я загрузить страницу, он выполняет код и возвращает 3 раза запрос «запрос проблемы». Я не вижу никаких ошибок в консоли JavaScript. Кто-нибудь знает, почему я не получаю надлежащего ответа от запроса?

+0

Вы используете локальный хост или просто просматриваете свою файловую систему – Neil

ответ

1

Обработчик onreadystatechange уволен каждый раз, когда изменяется имущество readyState. Это означает, что ваша еще часть всегда будет выполняться до тех пор, readyState не получается 4.

Проблемы в том, что вы пытаетесь получить доступ к responseText свойству httpResult, который является onreadystatechange обработчиком. Вместо этого используйте httpRequest.responseText.

if (httpRequest.readyState === 4 && httpRequest.status === 200){ 
      alert(httpResult.responseText); 
} 

Это не проблема, связанная с CORS, ваш URL-адрес позволяет запросить CORS.

jsFiddle Demo

BTW, вы должны использовать onerror обработчик для обнаружения XHR ошибок.

+0

Я думаю, вы имеете в виду readyState turn 4. (не 0) –

+0

@KhanhTO, это была опечатка. Благодарю. –

+0

Вы имеете право на свойство responseText. теперь как я могу предотвратить onreadystatechange от стрельбы? он дает мне 3 предупреждения, а когда состояние готовности 4, я получаю фактические данные, которые я просил. –

2

Вы, кажется, нарушаете ограничение same origin policy, встроенное в браузер, что предотвращает отправку запросов AJAX с перекрестными доменами.

Вы можете отправлять запросы AJAX только в том домене, из которого возник сценарий. В вашем случае вы пытаетесь отправить запрос на http://data.mtgox.com, и это может работать, только если ваша страница размещена в этом же домене, и я подозреваю, что это не ваше дело.

Конечно, если сервер поддерживает CORS или JSONP, можно будет выполнить такой запрос.

+0

запрос на http://data.mtgox.com возвращает объект json .. я сделал это успешно в другом примере .. позвольте мне обновить вопрос на примере что сработало –

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