AJAX готовность - PullRequest
       9

AJAX готовность

0 голосов
/ 17 ноября 2009

Этот скрипт отправляет запрос веб-серверу Apache каждые 500 мс на получение XML-документа с использованием AJAX. Этот скрипт корректно работал во всех браузерах, перечисленных ниже, до недавнего времени. Теперь XMLHttpObject readyState будет равен 4 в течение минуты или около того, но затем будет переключаться между 0 и 1. Когда я обновляю веб-страницу, readyState возвращается к 4, но снова завершает переключение между 0 и 1 через минуту или около того.

Я почти уверен, что эта ошибка стала возникать после того, как мы были вынуждены включить IPV6. Я протестировал скрипт на нескольких компьютерах с использованием Internet Explorer 7, Internet Explorer 8, Firefox 3.0.15 и Firefox 3.5.5. В настоящее время он корректно работает только в Internet Explorer 7 и 8.

Есть ли у кого-нибудь какие-либо предложения о том, как заставить это работать правильно в Firefox?

HTML & Javascript Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
<link rel="stylesheet" type="text/css" href="css/master_default.css">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Monitor</title>
</head>

<div id='screen_container'>
  <div id='data_tables'>
    <div id='data_tables_heading' class='page_container_heading'>Real-Time Data Tables</div>
    <div id="table_holder"></div>
  </div>
</div>

<script type='text/javascript' src='scripts/jquery.js'></script>

<!-- Handles AJAX server interface to retrieve XML positioning data. -->
<script language="javascript" type="text/javascript">
var ifspe_server_address = 'http://10.0.0.1:8080/';

var ifspe_positioning_dto_filename  = 'digital_receiver_ifspe_dto.xml';
var xml_http_object_positioning_dto = getXMLHttpObject();

get_ifspe_positioning_dto();

var ifspe_status_message_dto_filename  = 'ifspe_status_message_dto.xml';
var xml_http_object_status_message_dto = getXMLHttpObject();

get_ifspe_status_message_dto();

var refresh_data_id         = window.setInterval("get_ifspe_positioning_dto()", 500);
var refresh_status_messages = window.setInterval("get_ifspe_status_message_dto()", 500);
var updating_state          = 1;

// Write status message to text box.
function update_status_message(status_message_text)
{
  if(updating_state == 1)
  {
    var msg = document.getElementById("status_message_value");
    msg.innerHTML = status_message_text;
  }  
}

// Write status message to text box.
function update_debug_message(debug_message_text)
{
  if(updating_state == 1)
  {
    var msg = document.getElementById("debug_message_value");
    msg.innerHTML = debug_message_text;
  }  
}

// Retrieve XML HTTP object based on browser type.
function getXMLHttpObject()
{
  var httpObj;

  // Use this for Internet Explorer browsers.
  if(window.ActiveXObject)
  {
    httpObj = new ActiveXObject("Microsoft.XMLHTTP");
  }
  // Use this for Firefox browsers.
  else if(window.XMLHttpRequest)
  {
    httpObj = new XMLHttpRequest();
  }

  return httpObj;
}

// Sends request for XML Status Message Data Transfer Object (DTO)  file to server.
function get_ifspe_status_message_dto()
{
  var msg;
  msg = "AJAX readyState: " + xml_http_object_status_message_dto.readyState;
  update_debug_message(msg);

  // Not sure if this abortion is helpful.
  if(xml_http_object_status_message_dto.readyState > 0 && 
     xml_http_object_status_message_dto.readyState < 4)
  {
    xml_http_object_status_message_dto.abort();
  }
  else
  {
    // Added '?vers="+new Date().getTime()' to the server address so that it always gets a new XML file and not a cached version.
    xml_http_object_status_message_dto.open("GET", 
    ifspe_server_address+ifspe_status_message_dto_filename+"?vers="+new Date().getTime(), true);

    xml_http_object_status_message_dto.onreadystatechange = ifspe_status_message_dto_handler;

    xml_http_object_status_message_dto.send(" ");
  }
}

// Handles new XML file available event.
function ifspe_status_message_dto_handler()
{
  // If start/stop button is set to start (run).
  if(updating_state == 1)
  {
    if(xml_http_object_status_message_dto.readyState == 4)
    {
      if(xml_http_object_status_message_dto.status == 200)
      {  
        // Get XML data.
        var response = xml_http_object_status_message_dto.responseXML;

        var status_message_root = response.getElementsByTagName("STATUS_MESSAGE_FILE");

        // Parse xml file for status message tag.
        if(status_message_root != null)
        {
          if(status_message_root[0] != null)
          {
            var message = status_message_root[0].getElementsByTagName("MESSAGE");

            // Parse xml file for message tag.
            if(message[0] != null)
            {
              // Get message tag.
              var message_text = message[0].childNodes[0].nodeValue;

              // Update status message.
              update_status_message(message_text);
            }
          }
        }
      }
    }
  }
}

// Sends request for XML Positioning Data Transfer Object (DTO) file to server.
function get_ifspe_positioning_dto()
{
  // Not sure if this abortion is helpful.
  if(xml_http_object_positioning_dto.readyState > 0 && xml_http_object_positioning_dto.readyState < 4)
  {
    xml_http_object_positioning_dto.abort();
  }
  else
  {
    // Added '?vers="+new Date().getTime()' to the server address so that it always gets a new XML file and not a cached version.
    xml_http_object_positioning_dto.open("GET", 
    ifspe_server_address+ifspe_positioning_dto_filename+"?vers="+new Date().getTime(), true);

    xml_http_object_positioning_dto.onreadystatechange = ifspe_positioning_dto_handler;

    xml_http_object_positioning_dto.send(" ");
  }
}

// Parse XML data.
//function handle_response()
function ifspe_positioning_dto_handler()
{
  // If start/stop button is set to start (run).
  if(updating_state == 1)
  {
    if(xml_http_object_positioning_dto.readyState == 4)
    {
      if(xml_http_object_positioning_dto.status == 200)
      {
        // Get XML data.
        var response = xml_http_object_positioning_dto.responseXML;

        //
        // Log new XML data (Only works for Internet Explorer browsers).
        //
        if(logging_state == 1)
        {
          if(window.ActiveXObject)
          {          
            var digital_receiver = response.getElementsByTagName("DIGITAL_RECEIVER");
            // Process data.
          }
        } 
      }
      else if(xml_http_object_positioning_dto.status == 404)
      {
        alert("URL does not exist!");
      }
      else
      {
        //alert("Status is "+httpObj.status);
      }
    }
  }
}
</script>

</html>

1 Ответ

1 голос
/ 18 ноября 2009

Я отключил IPV6 в Firefox, и это решило проблему.

Инструкция для этого:

  1. В строке адреса введите about: config и нажмите EnterReturn. О about: config "Это может привести к аннулированию вашей гарантии!" страница предупреждения может появиться. Нажмите Я буду осторожен, обещаю !, чтобы перейти к странице about: config.

  2. В отображаемом списке введите network.dns.disableIPv6 в текстовом поле Фильтр.

  3. Найти запись для network.dns.disableIPv6.

  4. Если значение равно false, дважды щелкните его, чтобы изменить значение на true. Если значение уже равно true, IPv6 уже отключен, поэтому он не вызывает ваших проблем.

  5. Закройте Firefox, запустите его снова и попробуйте зайти на сайт.

Отключить IPV6 Reference

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