2

ajax を介して投稿リクエストを別のドメインに送信し、json レスポンスを取得しようとしています。サーバーは会社の敷地内にあり、ログを介して、json で応答を送信していることがわかります。

以下は私の試みのサンプルです:

1)

function makeRequest(strURL){
    $.get(strURL+"?callback=rest.draw_table_dyn", "{}", 
    function(resp){
        rest.draw_table_dyn(resp);
    });
}

2)

xmlhttpPost : function(strURL) {
var xmlHttpReq = false;
var self = this;
if (window.XMLHttpRequest) {
    self.xmlHttpReq = new XMLHttpRequest();
    }
else if (window.ActiveXObject) {
    self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
self.xmlHttpReq.open('POST', strURL, true);
self.xmlHttpReq.setRequestHeader("Content-Type", "application/json");
self.xmlHttpReq.onreadystatechange = function() {
    rest.draw_table_dyn(self.xmlHttpReq.responseText);
}
self.xmlHttpReq.send(null);
}

ただし、次のような問題が発生します。

1) サーバーは常に、「GET」または「POST」リクエストではなく「OPTIONS」リクエストでヒットします。このリンク (http://engin.bzzzt.biz/2010/01/25/cross-domain-xhr-access-control-preflight/) から、これが標準のプリフライト リクエストであることがわかりました。

しかし、POSTリクエストを行うことは可能ですか? $.post、$.ajax、または $.get を使用してみましたが、役に立ちませんでした。

2) 応答データが空です。ページにアイテムを入力するには、データが必要です。jsonを読む方法はありますか?現在、戻りステータスが 0 の空の文字列のみを取得しています。

xmlHttpRequest、$.ajax、$.get、および $.post を試して、リクエストを送信し、json を受信して​​も無駄でした。

タグにスクリプトを保持することについて、こちら(http://stackoverflow.com/questions/4221458/how-to-make-a-jsonp-call-to-an-api-using-jquery)を読みました。これも私にとってはうまくいきませんでした。ここで私が間違っていることはありますか?

4

3 に答える 3

1

現在、POSTAjax 経由で別のオリジンにアクセスする唯一の方法は、サーバーが適切なCORS Allow-*ヘッダーで応答する場合です。

Access-Control-Allow-Origin: your.origin

このようなヘッダーがない場合、 Same-Origin Policyにより、リクエストはブラウザーによって拒否されます。

最初の例では、JSONP ( ?callback=...) を使用しようとしているようです。このようなリクエストは、次の方法ではなくページにGET新しい要素を追加することによって行われるため、厳密に制限されています。<script>XMLHttpRequest

<script src="http://remote.origin/resource?callback=rest.draw_table_dyn"></script>

CORS は、ブラウザーのサポートXMLHttpRequest Level 2も、またはXDomainRequest(IE8/9)のいずれかに制限されています。

さらに、ブラウザとリモート サーバーの間を仲介するサーバー側のプロキシを作成する必要があるという制限があります。

于 2012-05-15T19:13:33.687 に答える
0

$.post と $.ajax を使用して POST リクエストを行うことができます。 $.ajax を使用して、「成功」と「失敗」の関数を提供します。「エラー」関数で、エラー メッセージを読み取ります。これにより、ajax リクエストが失敗する理由がわかります。

私の推測では、ajax リクエストは 404 エラーを返しています。

PS $.get と $.post は、$.ajax .. の簡略版です。

于 2012-05-15T19:06:11.133 に答える
0

同一生成元ポリシーにより、サイト外 (異なるドメイン) にあるページに対して ajax 呼び出しを行うことはできません。

JSONP をデータ型として使用するなど、いくつかの回避策があります。

于 2012-05-15T19:09:20.807 に答える