10

Web サービスへの jQuery 呼び出しを実行したいのです。

http://myservice.com/uservisits/create基本的に、JSONオブジェクトを送信したいのですが、どんな種類の応答応答も受け取りたくありません。ただし、いくつかのドメインで同じサービスを使用したいと考えています。つまり、Ajax に関連するクロスドメインの制限に直面することになります。

これどうやってやるの?JSONP などについてはたくさんありますが、応答を処理する必要はありません。明らかな詳細が欠けているように感じます。

4

3 に答える 3

8

http GET リクエストを送信する最も簡単な方法は、イメージ ビーコンを使用することです。

var json = encodeURIComponent(JSON.stringify(obj));
new Image().src = "http://myservice.com/uservisits/create?JSON=" + json;

loadまた、 イベントとイベントを処理することで、少しの情報を取得することもできerrorます。もちろん、応答が画像でない場合、errorイベントは呼び出されますが、load. それを解決するために、単一のピクセル画像を返すようにサービスを設定できます。

編集: HTTP POSTを使用することを好むかもしれないと述べました。画像ビーコンほど単純ではありませんが、非表示の iframe を使用してクロスドメイン投稿を作成できます。

var frame = $("<iframe>").hide();
frame.load(function() {
    var frameBody = frame.contents().find("body");
    var form = $("<form>", {
        action: "http://myservice.com/uservisits/create",
        method: "POST"
    });
    form.appendTo(frameBody);
    $("<input/>", {
        name: "json",
        value: json
    }).appendTo(form);
    form[0].submit();
});
frame.appendTo("body");

jQueryにはすでにこのようなものが組み込まれていると思います。jQuery.ajaxドキュメントを掘り下げてみてください。そうでない場合は、おそらくそれを行うプラグインを見つけることができます。

于 2012-10-22T20:23:39.263 に答える
2

応答を処理していないという事実は、直面している同一生成元ポリシーの問題には影響しません。ただし、サービスのすべてのコンシューマーを制御するという事実は、 CORSを使用する可能性を開きます。ただし、すべてのブラウザがCORSをサポートしているわけではありません。ブラウザの互換性チャートを参照してください。他のブラウザをサポートする必要がある場合でも、JSONPを使用する必要があります。

于 2012-10-22T20:17:59.833 に答える
1

データを戻したくないという事実は、実際には無関係であり、同じクロスドメインの問題に直面しています。あなたが行くことができる2つの方法があります...

1)jsonp(実際にはgetリクエストを作成します)を使用してデータを送信できますが、意図的にhttp動詞を使用する必要があるため(つまり、GETでデータを取得する必要があるため)、少し面倒に感じます。

2)ARR(IISのアプリケーション要求ルーティング)を使用して、基本的に要求を書き換えることができます。したがって、各ドメインのルールを設定して、書き換えルールを設定します。たとえば、www.mydomain.com / webcallはhttp://myservice.com/uservisits/createにルーティングします。ここで、mydomain.comは、ajax呼び出しが開始されるドメインです。これを行うと、ブラウザに関する限り、同じドメインでリクエストを行っているため、通常の方法でajaxを使用できます。

于 2012-10-22T20:17:43.937 に答える