比較的シンプルな 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 ); } );