2014-10-03 3 views
1

У меня есть функция, которая получает запросы, используя простой старый JS.Статус запроса xmlhttp всегда возвращает 0

function get(url,funct){ 
    var xmlhttpget = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); 
    xmlhttpget.onreadystatechange=function(){ 
     if (xmlhttpget.readyState==4 && xmlhttpget.status==200){ 
      funct(xmlhttpget.responseText); 
     } 
    } 
    xmlhttpget.open("GET",url,true); 
    xmlhttpget.send(); 
} 

Я использую это так:

ГЭТ (URL, функции (соответственно) {window.alert (соответственно);});

Когда моя функция обратного вызова перестала работать я изменил мою get() функции следующего для отладки:

function get(url,funct){ 
    var xmlhttpget = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); 
    xmlhttpget.onreadystatechange=function(){ 
     window.alert("ready state: "+xmlhttpget.readyState+" // status: "+xmlhttpget.status); 
     if (xmlhttpget.readyState==4 && xmlhttpget.status==200){ 
      window.alert("responded..."); 
      funct(xmlhttpget.responseText); 
     } 
    } 
    window.alert(url); 
    xmlhttpget.open("GET",url,true); 
    xmlhttpget.send(); 
} 

С этим я обнаружил, что во время каждого readystate изменить readystate будет прогрессировать от 1 до 2 до 4 , но статус всегда остается равным 0, поэтому мой callback никогда не вызывается, однако, когда я копирую предупрежденный URL-адрес в браузер, он работает нормально.

Что происходит? Является ли мой браузер кешированием страницы? Как я могу его исправить (установить определенный заголовок на запрошенной странице с помощью php?)?

О, не уверен, что это актуально, но страница, вызывающая функцию, находится внутри фрейма, у родительского документа которого есть тот же файл JavaScript.

+0

Используйте библиотеку, такую ​​как jQuery для запросов ajax. Это избавляет вас от многих головных болей. – TiMESPLiNTER

+1

Да, но я ничего не узнал: P –

+2

@TiMESPLiNTER: Библиотеки не нужны. XHR достаточно прост. –

ответ

0

Попробуйте напечатать statusText объекта. Вы можете столкнуться с политикой безопасности браузеров.

+0

Возвращает пустую строку 'window.alert (" ready state: "+ xmlhttpget.readyState +" // status: "+ xmlhttpget.status +" Текст состояния: "+ xmlhttpget.statusText);' –

+0

Что такое URL-адрес веб-сайта, инициирующего запрос и какой URL вы звоните? – Zenorbi

+0

Мы установили, что проблема связана с кросс-доменным запросом.Правильный ответ был упомянут в приведенных выше комментариях. –

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