我正在为智能家居组建一个小型内部网站点,并希望通过网页切换灯光。有一台PC可以解释像这样的http请求:
http://username:password@10.0.1.xx/cgi-bin/scada-remote/request.cgi?m=json&r=grp&fn=write&alias=1/1/20&value=true
这就像魅力一样,根据智能家居总线的硬件控制(至少部分)的文档编写。到目前为止一切都很好。
现在我想用JavaScript触发这个请求。据我所知,经过数小时的搜索和尝试,我需要使用“getJSON”#39;因为跨站点(是那个词?)的性质请求。我还需要添加' callback =?'到URL,否则它没有工作,即灯不会切换。功能:
function testLight(lightState) {
$.getJSON("http://username:password@10.0.1.xx/cgi-bin/scada-remote/request.cgi?m=json&r=grp&fn=write&alias=1/1/20&value=" + lightState + "&callback=?",
function(response) {
alert('hi');
});
此功能有效,但回调功能不会触发。然后我将函数重写为简单的ajax:
$.ajax({
url: 'http://username:password@10.0.1.xx/cgi-bin/scada-remote/request.cgi?m=json&r=grp&fn=write&alias=1/1/70&value=" + lightState + "&callback=?',
dataType: 'json',
success: function(result){
alert("token recieved: " + result.token);
},
error: function(request, textStatus, errorThrown) {
alert('error: ' + textStatus);
},
complete: function(request, textStatus) { //for additional info
alert('complete: ' + request.responseText);
alert('complete: ' + textStatus);
}
});
我得到"错误:parseerror","完成:未定义"并且"完成:parseerror"作为上述功能的反馈。但是灯正确切换。
粘贴网址
http://username:password@10.0.1.xx/cgi-bin/scada-remote/request.cgi?m=json&r=grp&fn=write&alias=1/1/20&value=true
进入浏览器导致切换灯和单词' true'在浏览器窗口中。所以反馈似乎到了。
我在回调函数没有触发的getJSON函数中做错了什么,或者更确切地说,我得到了解析错误'并且' undefined'反馈
非常感谢和最好的问候