jQuery $.ajax()、$.post は Firefox で "OPTIONS" を REQUEST_METHOD として送信します 質問する

jQuery $.ajax()、$.post は Firefox で

比較的シンプルな jQuery プラグインだと思っていたのに問題が発生しました...

プラグインは、Ajax 経由で PHP スクリプトからデータを取得し、にオプションを追加する必要があります<select>。Ajax リクエストは非常に一般的です。

$.ajax({
  url: o.url,
  type: 'post',
  contentType: "application/x-www-form-urlencoded",
  data: '{"method":"getStates", "program":"EXPLORE"}',
  success: function (data, status) {
    console.log("Success!!");
    console.log(data);
    console.log(status);
  },
  error: function (xhr, desc, err) {
    console.log(xhr);
    console.log("Desc: " + desc + "\nErr:" + err);
  }
});

これは Safari では問題なく動作するようです。Firefox 3.5 では、REQUEST_TYPEサーバー上の は常に 'OPTIONS' であり、$_POST データは表示されません。Apache はリクエストを 'OPTIONS' タイプとしてログに記録します。

::1 - - [08/Jul/2009:11:43:27 -0500] "OPTIONS sitecodes.php HTTP/1.1" 200 46

この Ajax 呼び出しが Safari では機能するのに、Firefox では機能しないのはなぜですか。また、Firefox でこれを修正するにはどうすればよいですか。

レスポンスヘッダー
日付: 2009 年 7 月 8 日水曜日 21:22:17 GMT
サーバー:Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2
X 搭載: PHP/5.2.6
コンテンツの長さ 46
キープアライブタイムアウト=15、最大=100
接続キープアライブ
コンテンツタイプ text/html

リクエストヘッダー
ホスト注文フォーム:8888
ユーザーエージェント Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5
text/html、application/xhtml+xml、application/xml;q=0.9、*/*;q=0.8 を受け入れます
受け入れ言語 en-us,en;q=0.5
Accept-Encoding gzip、deflate
Accept-Charset ISO-8859-1、utf-8;q=0.7、*;q=0.7
キープアライブ300
接続キープアライブ
出典 http://ux.inetu.act.org
アクセス制御リクエストメソッド POST
アクセス制御リクエストヘッダー x-requested-with

以下は Firebug 出力の画像です:

ベストアンサー1

エラーの原因は同一生成元ポリシーです。これは、自分のドメインに対してのみXMLHTTPリクエストを許可します。JSONP代わりにコールバック:

$.getJSON( 'http://<url>/api.php?callback=?', function ( data ) { alert ( data ); } );

おすすめ記事