8

最近、クロスドメインの投稿リクエストを作成するには、jQuery の代わりにeasyXDMを使用する必要があることに気付きました。$.ajaxeasyXDM をセットアップした後、関数がかなり密接に並んでいることがわかります。

jQuery:

$.ajax({
    url: "/ajax/",
    method: "POST",
    data: myData
});

easyXDM:

xhr.request({
    url: "/ajax/",
    method: "POST",
    dataType: 'json', // I added this trying to fix the problem, didn't work
    data: myData
});

myData は次のようにセットアップされます。

myData = {};
myData[1] = 'hello';
myData[2] = 'goodbye';
myData[3] = {};
myData[3][1] = 'sub1';
myData[3][2] = 'sub2';
myData[3][3] = 'sub3';

jQuery でリクエストを行うと、サブ フィールドは適切に処理されますが、easyXDM では処理されません。

以下は、jQuery を使用して POST 要求がサーバーに送信される方法です。

スクリーンショット-with-shadow.png http://img37.imageshack.us/img37/4526/screenshotwithshadow.png

そして、これが easyXDM でどのように機能するかを示します。

スクリーンショット-with-shadow.png http://img204.imageshack.us/img204/4526/screenshotwithshadow.png

jQuery のように、easyXDM / XHR リクエストを介して javascript オブジェクト / キーと値のペアの配列を送信するにはどうすればよいですか?

4

3 に答える 3

4

コメントで説明されている easyXDM の制限に照らして、それを使用できる唯一の方法は、データを .request に渡すときに手動でシリアル化することです。

xhr.request({
    url: "/ajax/",
    method: "POST",
    data: {jsonData: JSON.stringify(myData)}
});

または、独自の postMessage ソリューションを作成することもできますが、IE7 以下を除外します。

于 2012-10-26T15:11:55.637 に答える
2

AJAX 経由でクロスドメインのリクエストを送信することについて、あなたは間違っていると思います。JavaScript API に関係なく、AJAX を介してクロスドメインでリクエストを送信できます。ただし、クロスドメインの応答を受信するには、応答のデータ型がJSONPである必要があります。

JSONP は単純にパディング付きの JSON です。次に例を示します。

JSON:

{ Key: "Hello", Value: "World" }

JSONP:

callback({ Key: "Hello", Value: "World" })

微妙な違いですが、JSONP はブラウザーの同一生成元ポリシーをバイパスし、別のサーバーが提供する JSON データを使用できるようにします。

jQuery AJAX 経由で別のサーバーからの JSON データを使用するには、次のようにします。

$.ajax({
    url: "http://mydomain.com/Service.svc/GetJSONP?callback=callback",
    dataType: "jsonp",
    data: myData,
    success: function(data) {
        alert(data);
    }
});

これが機能するには、Web サービスが JSON ではなく JSONP として結果を返すことを確認する必要があります。

于 2012-10-26T14:22:15.453 に答える