Ajax, ошибка XMLHttpRequest, состояние не указано - PullRequest
4 голосов
/ 17 декабря 2010

Я работаю над примерами Ajax из книги, а пример из книги не работает, я пробовал это в IE 8 и FireFox. asyncRequest.status возвращает «Неуказанная ошибка». Я просто ковыряюсь в Аяксе, в чем здесь проблема? Спасибо.

<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
  .box { border: 1px solid black;
         padding: 10px }
</style>
<title>Switch Content Asynchronously</title>
<script type = "text/javascript" language = "JavaScript">
  var asyncRequest; // variable to hold XMLHttpRequest object

  // set up and send the asynchronous request.
  function getContent( url )
  {
     // attempt to create the XMLHttpRequest and make the request
     try
     {
        asyncRequest = new XMLHttpRequest(); // create request object

        // register event handler
        asyncRequest.onreadystatechange = stateChange; 
        asyncRequest.open( 'GET', url, true ); // prepare the request
        asyncRequest.send( null ); // send the request
     } // end try
     catch ( exception )
     {
        alert( 'Request failed.' );
     } // end catch
  } // end function getContent

  // displays the response data on the page
  function stateChange()
  {
     if ( asyncRequest.readyState == 4 && asyncRequest.status == 200 )
     {
        document.getElementById( 'contentArea' ).innerHTML = 
           asyncRequest.responseText; // places text in contentArea
     } // end if
  } // end function stateChange

  // clear the content of the box
  function clearContent()
  {
     document.getElementById( 'contentArea' ).innerHTML = '';
  } // end function clearContent
</script>
</head>
<body>
   <h1>Mouse over a book for more information.</h1>
   <img src = 
      "http://test.deitel.com/examples/iw3htp4/ajax/thumbs/cpphtp6.jpg" 
      onmouseover = 'getContent( "cpphtp6.html" )'
      onmouseout = 'clearContent()'/>
   <img src = 
      "http://test.deitel.com/examples/iw3htp4/ajax/thumbs/iw3htp4.jpg" 
      onmouseover = 'getContent( "iw3htp4.html" )'
      onmouseout = 'clearContent()'/>
   <img src = 
      "http://test.deitel.com/examples/iw3htp4/ajax/thumbs/jhtp7.jpg" 
      onmouseover = 'getContent( "jhtp7.html" )'
      onmouseout = 'clearContent()'/>
   <img src = 
      "http://test.deitel.com/examples/iw3htp4/ajax/thumbs/vbhtp3.jpg" 
      onmouseover = 'getContent( "vbhtp3.html" )'
      onmouseout = 'clearContent()'/>
   <img src = 
      "http://test.deitel.com/examples/iw3htp4/ajax/thumbs/vcsharphtp2.jpg" 
      onmouseover = 'getContent( "vcsharphtp2.html" )'
      onmouseout = 'clearContent()'/>
   <img src = 
      "http://test.deitel.com/examples/iw3htp4/ajax/thumbs/chtp5.jpg" 
      onmouseover = 'getContent( "chtp5.html" )'
      onmouseout = 'clearContent()'/>
   <div class = "box" id = "contentArea">&nbsp;</div>
</body>
</html>

ОБНОВЛЕНИЕ: В исходном посте я не упомянул, что запускаю этот пример на своей локальной машине. По соображениям безопасности (я полагаю, пожалуйста, исправьте меня, если я ошибаюсь), Ajax не работает на локальном компьютере, если на него нет какой-либо ссылки через домен. Я загрузил скрипт на сервер, и он работал нормально.

Ответы [ 2 ]

4 голосов
/ 21 января 2011

Статус запроса в IE не существует до тех пор, пока readyState = 4 (завершено), поэтому ваша проверка должна состоять из двух проверок.,,попробуй так.,,

 if (req.readyState == 4){
    // req is complete (200 for web servers, 0 for local files in IE)
    if ((req.status == 200)||(req.status == 0)){
       // good
    } else{ 
       // error
    } 
  }

Кроме того, Firefox никогда не возвращает readyState 4 для файла / протокола, но ie6 ошибки, пытаясь получить доступ к состоянию, если readyState не равен 4.,,,все еще прорабатывает несколько изломов на одной из моих страниц, которые должны работать на веб-сервере и с локальными файлами (файловый протокол) в ie6, то есть 8, и firefox

2 голосов
/ 17 декабря 2010

Похоже, вашему серверу либо не нравится запрос, либо что-то не так с вашими разрешениями на эти HTML-файлы.Способы отладки:

asyncRequest.send, возможно, не сможет принять нулевое значение.Я бы попробовал передать пустую строку: ""

Убедитесь, что вы можете использовать эти HTML-файлы в браузере, не используя ajax.Если вы не можете, вам придется выяснить, что происходит с этими правами доступа к файлу.

В Firefox установите Firebug и используйте его для отладки кода с точками останова, чтобы вы могли видетьточно, где это происходит.

К вашему сведению, ваш код несовместим с ie6.Нужно проверить ActiveXObject, хотя, если вас не волнует ie6, вы настроены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...