2015-04-17 1 views
1

Когда я пытался простой код, чтобы проверить XMLHttpRequest() функцию, я использовал этот код:Ничто не возвращается, когда asnyc параметр XHR установлен в значение TRUE

<script> 
//Global variable to store the XMLHttpRequest object 

    var myRequest; 

    //Package the request into its own function 

    function getData() 

    { 

    //Feature-testing technique to make sure the browser 

    //supports the XMLHttpRequest object 

    if (window.XMLHttpRequest) 

    { 

    //create a new instance of the object 

    myRequest = new XMLHttpRequest(); 

    } 

    //else - the XMLHttpRequest object is not supported: 

    //create an instance of ActiveXObject 

    else 

    { 

    myRequest = new ActiveXObject("Microsoft.XMLHTTP"); 

    } 

    //Use the open(retrievalMethod, "myDataFile.txt", bool) method 

    myRequest.open("GET", "test.txt", true); 

    //Use send() with a null argument - we have nothing to send: 

    myRequest.send(null); 

    //attach a function to handle onreadystatechange, 

    //that is, the response from the server: 

    myRequest.onreadystatechange = getData; 
    alert(myRequest.responseText); 
    } 
</script> 

Я хочу просто вернуть содержимое моего ' test.txt '.

Когда я запускаю этот код, я ничего не получаю! Я вижу только пустой экран .....

И теперь, Когда я установил параметр Asnyc в false, он работает!

Почему?

+0

FYI, вы должны использовать 'window.onload = getData;'. Вы хотите передать ссылку на функцию, а не результат возврата от выполнения функции немедленно. – jfriend00

+1

Это не имеет никакого смысла. 'getData()' запускает вызов ajax, а затем подключается 'onreadystatechange' к getData, который запустит другой вызов ajax и т. д. Это будет продолжаться вечно, если что-то не вызовет ошибку. – jfriend00

+0

Вам нужно будет показать нам код, который фактически использует результат вызова ajax, потому что это, вероятно, ошибка вашего кодирования, но вы оставили это из своего вопроса. – jfriend00

ответ

-1

XMLHttpRequests, указывающие на локальные файлы, невозможно из коробки (xmlhttprequest for local files).

Ваш GetData() - метод должен содержать что-то вроде этого:

funtion getData (requestObject) { 
    if (request.readyState === 4) { 
     //DO STUFF 
    } 
} 

Причина, почему это работает, когда вы выполняете запрос синхронизации, потому что вы, вероятно, не включают в себя код выше.

+0

Пожалуйста, объясните, что такое requestObject –

+0

Вы хотите добавить 'request.readyState === 4'? Зачем? –

+0

Параметр requestObject является вашим объектом requestObject. XMLHttpRequest имеет 4 состояния (http://stackoverflow.com/questions/632774/what-do-the-different-readystates-in-xmlhttprequest-mean-and-how-can-i-use-them). Вы должны подождать с кодом выполнения, пока ваш запрос не достигнет readyState 4 (это означает, что запрос завершен). – Joram

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