0

Arduinoで実行されているサーバーでJSONPを動作させようとしています。これは私の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 本文に移動しようとしましたが、どちらも役に立ちませんでした。

ありがとうございました。

4

1 に答える 1

1

サーバーの応答をまったく処理していません。ライブラリなしで実行する場合はeval、サーバーから返された結果が必要です。

実際、JSONP 実装は XHR ではありません。正しい src 属性を使用して、スクリプト タグとして HTML に挿入する必要があります。

このすべてのロジックがすでに抽象化されているライブラリを使用するだけです。

script タグを 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でマークできます。onload イベントに接続し、実行したらそのスクリプトを削除します。

于 2013-05-06T04:50:30.430 に答える