XMLHttpRequest超时

时间:2017-03-16 21:53:21

标签: javascript html xml http xmlhttprequest

我正在尝试编写一个JavaScript应用程序,该应用程序从托管Web服务器的Wiznet W5500芯片读取传感器数据。我正在使用XMLHttpRequest对象。我正在使用Wireshark监控数据包流量。我可以看到我的HTTP / XML字符串正在发送,Wireshark识别HTTP标头和XML格式。但是,当我尝试读取JavaScript应用程序中的数据时,它是NULL。

这是我的相关JavaScript代码。

<SCRIPT type="text/JavaScript">

var x = "<strong>Offline</strong>";
var y = "<strong>Offline</strong>";
var xhr = new XMLHttpRequest();
var periodMS = 20000;       
var timeoutMS = 1500;
console.log('READY STATE: UNSENT', xhr.readyState);
console.log('STATUS: UNSENT', xhr.status); 
var data;

setInterval(function(){
   xhr.open('GET', 'http://192.168.1.123/', true); 
   xhr.timeout = timeoutMS;

   if (xhr.readyState==1){console.log('READY STATE: OPENED', xhr.readyState);}
   if (xhr.status==0){console.log('STATUS: OPENED', xhr.status);}
   xhr.send(null);


   xhr.onreadystatechange = function () {
      if (xhr.readyState==0){console.log('OPEN NOT CALLED');}
      if (xhr.readyState==1){console.log('OPEN CALLED', xhr.responseText);}
      if (xhr.readyState==2){
console.log('HEADERS AND STATUS AVAILABLE', xhr.responseText);}
      if (xhr.readyState==3){console.log('LOADING');}
      if (xhr.readyState==4){
         console.log('DONE',xhr.statusText,xhr.responseXML);
         x = xhr.responseXML.getElementsByTagName("temp")[0].firstChild.data;
         console.log('TEMPERATURE=', x);
         document.getElementById("temperature").innerHTML = "<font size='+7'>" + x + "</font>";

         y = xhr.responseXML.getElementsByTagName("humid")[0].firstChild.data; 

         console.log('HUMIDITY=', y);
         document.getElementById("humid").innerHTML = "<font size='+7'>" + y + "</font>";
}}

   xhr.ontimeout = function () {

console.log('STATUS: TIMEOUT', xhr.status); 
      document.getElementById("temp").innerHTML = "<font size='+7' color='#FF0000'>" + x + "</font>";

      document.getElementById("humid").innerHTML = "<font size='+7' color='#FF0000'>" + y + "</font>";};


}, periodMS)        


</SCRIPT>

当执行XMLHttpRequest.send命令时,我可以在Wireshark上看到成功的SYN握手,对我的服务器的GET / HTTP请求,服务器回复HTTP / XML协议,服务器执行TCP重传,然后JavaScript应用程序ACK和FIN握手。下面是我的Wireshark捕获的屏幕截图,显示了HTTP / XML响应的详细信息,并显示了我运行一次interval函数时的控制台输出。 image

以下是我从服务器发送的确切字符串,用引号。

"HTTP/1.1 200 OK\r\nContent-Length: 122\r\nContent-Type: text/xml\r\nAccess-Control-Allow-Origin: *\r\nConnection: Keep-Alive\r\n<?xml version="1.0" encoding="utf-8"?><WatlowSense><temperature>29.40</temperature><humidity>7.75</humidity></WatlowSense>"

我是否从我的服务器发送了不正确的响应协议?我的JavaScript代码有问题吗?谢谢,非常感谢您的帮助。

0 个答案:

没有答案