JSONP回调问题

时间:2013-05-06 04:17:15

标签: html5 callback jsonp

我正在尝试让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主体,但它也没有帮助。

谢谢。

1 个答案:

答案 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事件,一旦执行就删除该脚本。