cakephp javascript變數 - 將變量從PHP傳遞到JavaScript的有效方法




php方式傳遞資料 php傳值json (8)

如果您修改.htaccess文件以包含

 AddType application/x-httpd-php .js

您可以使用.js文件,它將由PHP處理,這是您需要的一半。

就解決方案的醜陋程度而言,我會說這是最不醜陋的機制。 您可以嘗試將整個JS腳本作為字符串傳遞給PHP腳本,並對需要插入的變量進行搜索和替換,但我認為您會同意這比您當前使用的解決方案更加醜陋。

這個問題在這裡已有答案:

我不時要將一些變量從PHP傳遞給JS腳本。 現在我這樣做了:

var js-variable = "<?php echo $php-variable; ?>";

但這非常難看,我無法在.js文件中隱藏我的JS腳本,因為它必須由PHP解析。 處理這個問題的最佳解決方案是什麼?


請使用rest / rpc api並將json傳遞給你的js。 如果您使用jquery,可以通過以下方式完成此操作:

rest.php

<?php echo "{name:biplav}" ?>

然後從你的js撥打這樣的電話:

var js_var;
$.get("rest.php", function(data) {
         js_var=data;
});

這是我能想到的最簡單的例子。


在我看來,如果你需要直接在JS中傳遞變量,可能你的Web應用程序設計得不好。

所以,我有兩個提示:*使用JSON文件進行常規配置,例如/js/conf/userprefs.json

{
    "avatar": "/img/users/123/avatar.jpg",
    "preferred_color": "blue"
    // ...
}
  • 或者(更好的方法)你可以通過AJAX調用檢索你的json confs。

使用像Symfony2這樣的PHP框架,您可以在路由配置中確定一種格式,將變量的輸出留給模板引擎(如Twig)。

我為Symfony2用戶做了一個例子,但任何程序員都可以使用它:

使用routing.yml

userprefs:
    pattern: /js/confs/userprefs.{_format}
    defaults: { _controller: CoreBundle:JsonPrefs:User, _format: json }
    requirements:
        _format: json
        _method: GET

在控制器內部,您可以執行檢索變量所需的所有查詢,並將這些變量放在視圖中:

資源/瀏覽/ JsonPrefs / User.json

{
    "avatar": "{{ user.avatar }}",
    "preferred_color": "{{ user.preferred_color }}"
    // ...
}

現在,您可以通過簡單的AJAX調用來檢索JSON。 出於性能目的,您可以使用Varnish緩存JSON(例如)。 這樣,每次讀取用戶首選項時,服務器都不需要執行查詢。


至少,您可以使用PHP短代碼使您的“醜陋”解決方案更清潔:

var js-variable = "<?= $php-variable ?>";

如果您不想使用PHP生成您的javascript(並且不介意對您的Web服務器進行額外調用),請使用AJAX來獲取數據。

如果您確實想使用PHP,請在輸出之前始終使用json_encode進行編碼。

<script>
    var myvar = <?php echo json_encode($myVarValue); ?>;
</script>

至於避免通過PHP解析器運行.js文件,除了可能通過AJAX調用獲取js-variable的值之外,你幾乎無能為力。

您也可以考慮輸出如下值:

var js_variable = <?php echo json_encode ($php_variable); ?>

逃避所有會破壞你的JavaScript的東西。


將所有.js文件放在一個文件夾中,並配置HTTP服務器將所有請求重定向到那些加載文件並輸出文件的PHP文件。

假設你有Apache,你的.js文件在/ js中:

RewriteRule /js   /getjs.php

getjs.php:

<?php
header('Content-Type: text/javascript');
include_once($_SERVER['SCRIPT_NAME']);
?>

Syntax    Name             Description

x == y    Equality         True if x and y have the same key/value pairs
x != y    Inequality       True if x is not equal to y
x === y   Identity         True if x and y have the same key/value pairs
                            in the same order and of the same types
x !== y   Non-identity     True if x is not identical to y
++ x      Pre-increment    Increments x by one, then returns x
x ++      Post-increment   Returns x, then increments x by one
-- x      Pre-decrement    Decrements x by one, then returns x
x --      Post-decrement   Returns x, then decrements x by one
x and y   And              True if both x and y are true x=6 y=3
                           (x < 10 and y > 1) returns true 
x && y    And              True if both x and y are true x=6 y=3
                           (x < 10 && y > 1) returns true
a . b     Concatenation    Concatenate two strings: "Hi" . "Ha"




php javascript cakephp cakephp-2.0