314
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script>
<script>
$.get("http://example.com/", function(data) {
     alert(data);
});
</script>

その URL に対して OPTIONS リクエストを実行すると、コールバックが呼び出されることはありません。

クロスドメインでない場合は正常に動作します。

jQuery は<script>ノードで呼び出しを行い、ロードされたときにコールバックを実行するべきではありませんか? (クロスドメインであるため)結果を取得できないことは理解していますが、それで問題ありません。通話を通過させたいだけです。これはバグですか、それとも何か間違っていますか?

4

10 に答える 10

286

MDNによると、

プリフライトリクエスト

単純なリクエスト(上記で説明)とは異なり、「プリフライト」リクエストは、実際のリクエストを安全に送信できるかどうかを判断するために、最初にHTTPOPTIONSリクエストヘッダーを他のドメインのリソースに送信します。クロスサイトリクエストは、ユーザーデータに影響を与える可能性があるため、このようにプリフライトされます。特に、次の場合、リクエストはプリフライトされます。

  • GETまたはPOST以外のメソッドを使用します。また、POSTを使用してapplication / x-www-form-urlencoded、multipart / form-data、またはtext / plain以外のContent-Typeでリクエストデータを送信する場合、たとえば、POSTリクエストがXMLペイロードをサーバーに送信する場合application/xmlまたはtext/xmlを使用すると、リクエストがプリフライトされます。
  • リクエストにカスタムヘッダーを設定します(たとえば、リクエストはX-PINGOTHERなどのヘッダーを使用します)
于 2012-10-23T12:41:06.630 に答える
92

OPTIONS は http://www.w3.org/TR/cors/ からのものですもう少し情報

于 2009-08-24T06:12:43.557 に答える
2

そのような URL が与えられた場合、jQuery が自然に JSONP リクエストを行うとは思えません。ただし、コールバックに使用する引数を指定すると、JSONP リクエストが実行されます。

$.get("http://metaward.com/import/http://metaward.com/u/ptarjan?jsoncallback=?", function(data) {
     alert(data);
});

その引数 ("jsoncallback" を呼び出す必要はありません) を使用するかどうかは、完全に受信側のスクリプト次第であるため、この場合、関数は呼び出されません。しかし、あなたは metaward.com のスクリプトを実行したいだけだと述べたので、それでうまくいきます。

于 2009-08-10T21:14:35.200 に答える
1

実際、セキュリティ上の理由から、クロスドメインAJAX(XMLHttp)リクエストは許可されていません(クライアント側から「制限された」Webページをフェッチしてサーバーに送り返すことを考えてください。これはセキュリティの問題になります)。

唯一の回避策はコールバックです。これは次のとおりです。新しいスクリプトオブジェクトを作成し、srcをエンドサイドJavaScriptにポイントします。これは、JSON値(myFunction({data})を使用したコールバックです。myFunctionは、データを処理する(たとえば、データを格納する)関数です。変数内)。

于 2009-08-10T19:49:19.210 に答える
1

「application/json」を「text/plain」に変更するだけで、JSON.stringify(request) を忘れないでください。

var request = {Company: sapws.dbName, UserName: username, Password: userpass};
    console.log(request);
    $.ajax({
        type: "POST",
        url: this.wsUrl + "/Login",
        contentType: "text/plain",
        data: JSON.stringify(request),

        crossDomain: true,
    });
于 2017-09-22T16:05:51.817 に答える
0

Firefox と Opera (Mac でもテスト済み) は、このクロスドメイン性を好まないようです (ただし、Safari は問題ありません)。

リモート ページをカールするには、ローカル サーバー側のコードを呼び出す必要がある場合があります。

于 2009-08-10T19:18:07.387 に答える