4

これが人気のあるトピックであることは知っていますが、完全に包括的な答えをまだ見つけていません。

私は、「顧客」が Web サイトに Google マップを配置する簡単な方法を作成しようとしています。これは、顧客 (またはそのサブセット) の位置を地図上にプロットします。顧客は、PHP スクリプトによってオンザフライで XML に変換される MySQL データベースにいます (Google の例のように)。これは私の Web サイトでは問題なく動作しますが、別の Web サイトで試してみると、xmlHTTPRequest は別のドメインにあるため、PHP を見ることができません。

元のドメインの PHP ファイルを読み取るだけの別のドメインに別の PHP ファイルを書き込むことで、これを回避できます。しかし、すべてのお客様がサーバーで PHP を実行しているわけではありません。JavaScript を使用してデータベースから XML 結果を返す方法はありますか?

いくつかのポイント:

  1. xmlHTTPRequest を作成する JavaScript は、まだサーバー上にあります。クライアントはスクリプト タグからそれにリンクしています。それで十分かもしれないと思ったのですが、「オリジン」(とにかく Chrome によると) はまだドメイン #2 として認識されています

  2. これは素晴らしいことです。xmlHTTPRequest で絶対参照を使用すると (例: request.open('GET', 'http://mydomain.com/api/foo.php', true))、IE では失敗しますが、相対参照 ('/api/foo.php') を使用すると機能します。

  3. よくわかりませんが、JSON を使用できますか? 「script src="http://..../someData.js?callback=some_func"」を見たことがありますが、方法がわかりません.「someData.js」をJSONのように見せますか? (私は関数の観点から非常に考えていますが、これはおそらく間違っていますか?)。

  4. 追加してみました: header("Access-Control-Allow-Origin: *"); XML を出力する PHP の先頭に移動しますが、実際にはあまり機能していません。

  5. クライアントのサーバーで PHP ラッパーを使用する場合、単純な file_get_contents や fopen ではなく、cURL リクエストを使用する利点は何ですか?

申し訳ありませんが、多くの質問がありますが、ご指導いただければ幸いです。

多大な感謝、

マット

4

3 に答える 3

6

これを回避する簡単な方法は、PHP スクリプトが次のようなものを返すようにすることです。

callback_function(YOUR_DATA);

次に、クライアント サイトに含まれる JS スクリプトに、PHP スクリプト<script>src指す を動的に挿入します。

(function() {
    var scriptElement   = document.createElement('script');
    scriptElement.type  = 'text/javascript';
    scriptElement.async = true;
    scriptElement.src   = 'http://example.org/yourScript.php?data=...';
    var container       = document.getElementsByTagName('script')[0];
    container.parentNode.insertBefore(scriptElement, container);
})();

このテクニックはJSONPと呼ばれ、あなたが望むことを正確に行うべきです ;)

この問題を回避する別の方法は、コンテンツ セキュリティ ポリシーでクロスドメイン XMLHttpRequest を許可することです。しかし、現在それをサポートしているのは Firefox 4 だけだと思います。

于 2010-10-27T16:57:23.063 に答える
1

XML の代わりに JSON を使用できますか? もしそうなら、あなたのオプション 3) がおそらくあなたの最善の策になるでしょう。このアプローチにはセキュリティ上のリスクがあるため、既知の信頼できるソースに対してのみ使用する必要があります。

詳細: http://www.codeproject.com/KB/aspnet/JSONToJSONP.aspx

于 2010-10-27T16:59:57.393 に答える
0

JavaScript はクライアント側ですが、データベースはそうではありません。JavaScript は、MySQL データベースから直接プルすることはできません。

于 2010-10-27T16:56:28.867 に答える