English 中文(简体)
AJAX readystate
原标题:

This script sends a request to a Apache web server every 500ms to retrieve an XML document using AJAX. This script functioned correctly on all the browsers listed below until recently. Now the XMLHttpObject readyState will equal 4 for a minute or so but then will end up toggling between 0 and 1. When I refresh the web page, readyState goes back to 4 but again ends up toggling between 0 and 1 after a minute or so.

I am pretty certain this error started to occur after we were forced to enable IPV6. I ve tested the script on several computers using Internet Explorer 7, Internet Explorer 8, Firefox 3.0.15, and Firefox 3.5.5. Currently it only functions correctly under Internet Explorer 7 and 8.

Does anyone have any suggestions on how to get this to function correctly under 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>
最佳回答

I disabled IPV6 in Firefox and this solved the problem.

Instructions to do this:

  1. In the Location bar, type about:config and press EnterReturn. The about:config "This might void your warranty!" warning page may appear. Click I ll be careful, I promise!, to continue to the about:config page.

  2. In the displayed list, type network.dns.disableIPv6 in the Filter textbox.

  3. Find the entry for network.dns.disableIPv6.

  4. If the value is false, double-click on it, to change the value to true. If the value is already true, IPv6 is already disabled, so it isn t causing your problem.

  5. Close Firefox, start it again, and try to reach a website.

Disable IPV6 Reference

问题回答

暂无回答




相关问题
selected text in iframe

How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.

How to fire event handlers on the link using javascript

I would like to click a link in my page using javascript. I would like to Fire event handlers on the link without navigating. How can this be done? This has to work both in firefox and Internet ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Clipboard access using Javascript - sans Flash?

Is there a reliable way to access the client machine s clipboard using Javascript? I continue to run into permissions issues when attempting to do this. How does Google Docs do this? Do they use ...

javascript debugging question

I have a large javascript which I didn t write but I need to use it and I m slowely going trough it trying to figure out what does it do and how, I m using alert to print out what it does but now I ...

Parsing date like twitter

I ve made a little forum and I want parse the date on newest posts like twitter, you know "posted 40 minutes ago ","posted 1 hour ago"... What s the best way ? Thanx.

热门标签