我正在尝试让JSONP使用在Arduino上运行的服务器。 这是我的JS代码:
window.onload = init;
function init()
{
//alert("Test");
SendRequest();
}
function SendRequest()
{
alert("Sending request");
var url = "http://192.168.1.177";
var request = new XMLHttpRequest();
request.open("GET", url);
request.error = function(e) {
alert("ERROR");
};
request.send(null);
}
function ArduinoJSONP()
{
alert("Callback received!!!");
}
永远不会达到回调功能。
但如果我直接将浏览器直接指向Arduino IP,我会在浏览器中看到以下内容:
ArduinoJSONP({"data": 12345})
所以似乎服务器正在发送具有正确JSONP格式的响应,但不知何故该函数未被调用。还有什么我需要JS来调用函数吗?我甚至尝试将该功能移动到HTML主体,但它也没有帮助。
谢谢。
答案 0 :(得分:1)
您根本不处理服务器响应。如果您在没有任何库的情况下执行此操作,则需要eval
结果由服务器返回。
实际上JSONP实现不是XHR,你必须将它作为脚本标签注入到具有正确src属性的html中。
只需使用已经为您抽象出所有逻辑的库。
只需将脚本标记注入HTML树:
function SendRequest()
{
var element = document.createElement('script');
var s = document.getElementsByTagName('script')[0];
element.type = 'text/javascript';
element.async = true;
element.src = 'http://192.168.1.177';
s.parentNode.insertBefore(element, s);
}
您可以使用唯一ID标记它。 Hookup to onload事件,一旦执行就删除该脚本。