3

グローバル変数を作成せずに、外部 JavaScript ファイルの PHP 変数から JSON 配列にアクセスするにはどうすればよいですか?

json_encoded 配列を含む PHP 変数 $customers があります。

$customers = [{"id":"12","name":"Abe Adams"},{"id":"17","name":"Bill Brown"}]

jQuery UI オートコンプリート テキスト入力で配列の内容を使用したいと考えています。

オートコンプリート オプションの Ajax リクエストを作成するよりも、$customers 配列の値を使用することをお勧めします。この配列は渡され、ユーザーがページに到着したときにすぐに使用できます。

外部 JavaScript ファイルをロードする前に、$customers の内容を JavaScript 変数に渡すことができることはわかっています。

<script>var customers = <?php echo $customers; ?></script>
<script src="external.js"></script>

ただし、これにはグローバル JavaScript 変数を作成する必要があります。

外部 JS ファイルから $customers 配列にアクセスするより良い方法はありますか?


この質問は、以前に何度か尋ねられました。

質問:外部の JavaScript ファイルから PHP 変数にアクセスする 受け入れられる回答:グローバル変数を作成する

質問: ajax を使用せずに php から js に vars を渡す 上位の回答: Ajax を使用する

質問: php ファイルが変数を .js 外部ファイルに送信する 上位の回答: Ajax を使用する

質問:外部 JS から PHP ファイル変数を読み取る 上位の回答: eval を使用する

質問: PHP から JSON データを返し、Javascript を使用してそれを使用する承認され た回答:グローバル変数を作成する

4

3 に答える 3

2

external.jsいいえ、動的に生成しないとできません。ただし、戦略を少し改善することはできます。グローバルに名前を付ける代わりに、customersすべてのグローバル変数をアタッチするためのグローバル オブジェクトも使用します。

window.Globals = {};
Globals.customers = <?php echo $customers; ?>;
Globals.something_else = <?php echo $something_else; ?>

名前を付けないでくださいGlobals。あなたの会社やウェブアプリ/サイトに固有の名前を付けてください。このようにして、使用するグローバル変数が 1 つしかなく、サイトに固有の名前が付けられているため、変数名が外部スクリプトと競合するリスクを大幅に減らすことができます。

于 2012-06-02T05:40:22.917 に答える
1

また、requirejs の「パターン」を使用することもできます。

外部.js:

define([], {
    init: function (customerData) {
        ... all your setup
    }
});

ページ上:

require(['external'], function (externalSetupFile) {
    var customers = <?php echo $customers?>;
    externalSetupFile.init(customers);
});

(一般に) サイトの機能強化を開始するある種の "init" メソッドを持つことの大きな利点は、このようなことができることです。例えば:

Application = {
   init: function (bootstrapData) {
       UserModel.create(bootstrapData.userModelData); //for example 
       this.config = bootstrapData;
       this.setupUI();
   },
   setupUI: function () {
      //setup autocomplete and the like
      $("#someEl").autocomplete(this.config.customers);
   }
}

これのさらに良い部分は、実行していることを小さなセクションに分割できることです。これにより、テストとデバッグが非常に簡単になります。

于 2012-06-02T06:31:13.933 に答える
0

オートコンプリート プラグインを試している場合は、これを実装できると思います。

$("#some_input_field").autocomplete("search.php", {
    // your code
});

またはあなたもできる

$( "#some_input_field" ).autocomplete({
     source: "search.php",
     // some other code
});

ここでsource.phpは、データをロードする場所の URL に置き換えます。

于 2012-06-02T05:50:48.670 に答える