2012-06-09 2 views
5

У меня есть простой HTML-файл, который получает данные с сервера и выводит его:Получение 0 Как Статус

<html> 
    <head> 
     <script type="text/javascript"> 
     var xmlhttp = new XMLHttpRequest(); 
     function startRequest() { 
      xmlhttp.onreadystatechange = handleStateChange; 
      xmlhttp.open("GET", "http://new-host-2.home/test.html", true); 
      xmlhttp.send(null); 
     } 
     function handleStateChange() { 
      if (xmlhttp.readyState == 4) { 
       if (xmlhttp.status == 200) { 
        alert("The server replied with: ", xmlhttp.responseText); 
       } 
       else { 
        alert(xmlhttp.status); 
       } 
      } 
     } 
     </script> 
    </head> 
    <body> 
     <form> 
      <input type="button" value="Woooo" onclick="startRequest()"/> 
     </form> 
    </body> 
</html> 

Файл, который находится на сервере, test.html выглядит следующим образом:

<h1>Data received!</h1> 

Я продолжаю получать 0 в качестве статуса, несмотря на то, что в консоли он говорит, что все в порядке, и дает статус 200. Когда я меняю if (xmlhttp.status == 200) на if (xmlhttp.status == 0), он просто выдает The server replied with:. Почему это? Я что-то испортил? EDIT: Это может быть только мой сервер, я собираюсь переключиться на другой. Заголовки могут быть полезны:

Response Headers 
Accept-Ranges bytes 
Connection Keep-Alive 
Content-Length 13 
Content-Type text/html 
Date Sat, 09 Jun 2012 14:17:11 GMT 
Etag "267749b-d-4c20a6d0ef180" 
Keep-Alive timeout=15, max=100 
Last-Modified Sat, 09 Jun 2012 13:52:22 GMT 
Server Apache/2.2.19 (Unix) DAV/2 
Request Headers 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding gzip, deflate 
Accept-Language en-us,en;q=0.5 
Connection keep-alive 
Host new-host-2.home 
Origin null 
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0 
+0

Как вы заметили, вы уверены, что 'alert' принимает несколько аргументов? – pimvdb

+3

- это страница, которую вы называете этим, также на 'http: // new-host-2.home'? –

+0

Да, это так. @IliaG –

ответ

1

функция оповещения только принимает один параметр, вы передаете 2.

Дайте этому выстрел:

var xmlhttp = new XMLHttpRequest(); 
function startRequest() { 
    xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState==4) 
     { 
      if(xmlhttp.status==200) 
       alert("The server replied with: " + xmlhttp.responseText); 
      else 
       alert(xmlhttp.status); 
     } 
    } 
    xmlhttp.open("GET", "http://new-host-2.home/test.html", true); 
    xmlhttp.send(); 
} 

Если он все еще не работает , это может быть проблема безопасности: http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972/why-am-i-getting-xmlhttprequest.status0

Если он работает в Safari, попробуйте удалить домен в запросе, чтобы сделать путь относительным. Возможно, Firefox думает, что вы пытаетесь перекрестнодоменными вещами.

var xmlhttp = new XMLHttpRequest(); 
function startRequest() { 
    xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState==4) 
     { 
      if(xmlhttp.status==200) 
       alert("The server replied with: " + xmlhttp.responseText); 
      else 
       alert(xmlhttp.status); 
     } 
    } 
    xmlhttp.open("GET", "/test.html", true); 
    xmlhttp.send(); 
} 
+0

nope, не работает :( –

+1

@BobbyTables - umm ... ОК. Вы можете уточнить? Что происходит, когда вы открываете браузер и переходите к http: //new-host-2.home/test.html. –

+0

Я нажимаю кнопку ввода, и ничего не происходит. Когда я помещаю блок else, он говорит, что xmlhttp.status = 0 –

1

Довольно сложно сказать, что именно здесь возникает. Вот что-то, что я подозреваю, это может быть

1) Та же политика хозяина. Убедитесь, что запрашиваемая вами страница находится на точной того же хоста. Например, может быть www., а другой нет. Самый простой способ сделать это - опустить хост-часть URL-адреса при выполнении запроса AJAX.
xmlhttp.open("GET", "/test.html"); должен просто работать.

2) Проблемы с охватом. Возможно, вы читаете состояние из другого объекта, кроме того, который делает запрос? Убедитесь, что вы читаете один и тот же объект, получая его из события, переданного обратному вызову. В любом случае, Btw XMLHttpRequest не может многократно использоваться повторно, поэтому не думайте, что вы сохраняете некоторые ресурсы, делая его глобальным. Гораздо проще объявить его внутри функции startRequest.
Затем измените функцию обратного вызова, как это:

function handleStateChange(e) 
{ 
    var xmlhttp = e.target; 
    if (xmlhttp.readyState == 4) 
    { 
     if (xmlhttp.status == 200) 
      alert("The server replied with: " + xmlhttp.responseText); 
     else 
      alert(xmlhttp.status); 
    } 
} 

Есть некоторые очень хорошие оберток для создания AJAX запросов (JQuery, в частности), но если вы согнуты на создание своей собственной (или просто обучение внутренностей), то это примерно то, что вы хотите:

function startRequest(url, callback) 
{ 
    var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); 
    xmlhttp.onreadystatechange = function(e) 
    { 
     if (xmlhttp.readyState == 4 && xmlhttp.status >= 200 && xmlhttp.status < 300) 
      callback(xmlhttp.responseText); 
    }; 
    xmlhttp.open("GET", url); 
    xmlhttp.send(null); 
} 

startRequest("/test.html", function(response) {alert("The server replied with: " + response);}); 
Смежные вопросы