我正在尝试编写一个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代码有问题吗?谢谢,非常感谢您的帮助。