首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高可读性?(将php vars传递到外部文件中的javascript )

问如何提高可读性?(将php vars传递到外部文件中的javascript )
EN

Stack Overflow用户
提问于 2013-11-08 21:47:03
回答 3查看 178关注 0票数 3

我有以下代码:

代码语言:javascript
复制
<HTML>
    <?php
        if(isset($_GET['adjust'])){
            $adjust = true;
        }
        //More variabele declaring
    ?>
    <HEAD>
        <script type="text/javascript">
            var adjust = "<?php Print($adjust); ?>";
            //More variable 'transports'
        </script>
    </HEAD>
<!-- rest of the file -->

我想清理一下,因为我有大量的变量。这会影响文件的可读性和概述。

我想把它都放到一个外部的JavaScript文件中,但是它似乎不起作用。

代码语言:javascript
复制
<HTML>
    <?php
        if(isset($_GET['adjust'])){
            $adjust = true;
        }
        //More variabele declaring
    ?>
    <HEAD>
        <script type="text/javascript" src="externalJS.js"></script>
    </HEAD>
<!-- rest of the file -->

使用externalJS.js:

代码语言:javascript
复制
var adjust = "<?php Print($adjust); ?>";
//More variable 'transports'

根据this question的说法,这里也提到了堆栈溢出,这是不可能的。

鉴于上述问题已经得到解答,是否有办法利用过去几年的知识来做到这一点?还有其他方法来提高可读性吗?

P.S.:我想值得一提的是,我从url、txt-文件和cookie中获得了php-变量。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-08 22:01:50

当我在一些情况下不得不将许多变量放入javascript中时,我使用了将所有这些项加载到对象(或数组)中并将数据输出到javascript中的对象/数组文字中的方法。

例如:

代码语言:javascript
复制
<?php
$js_object = new stdClass();
$js_object->foo = 'some value';
$js_object->bar = 'some other value';
?>
<script type="text/javacript">;
var php_values = <?php echo json_encode($js_object); ?>;
console.log(php_values.foo);
console.log(php_values.bar);
</script>

这做了几件事。

  1. 如果要传递的变量需要更改,则JS输出部分根本不需要更改。您想在JS中访问的任何内容只需在通过$js_object将对象输出到浏览器之前在json_encode()中加载即可。
  2. 它将PHP提供的所有值放在javascript中的一个整洁的对象/数组中,在那里可以访问它们。
  3. 您可以轻松地以这种方式传递复杂的数据结构(嵌套数组、包含数组的对象、对象数组等)。
  4. 如果需要,您可以扩展javascript中的对象,以提供方法等来处理数据。

我还要指出,您可能想考虑一下是否要以这种方式传递cookie数据。Cookie数据无论如何都可以用于javascript,因此,如果需要更改值或类似的数据,您可能希望直接使用该数据。

票数 5
EN

Stack Overflow用户

发布于 2013-11-08 22:06:08

在PHP中创建一个数组,其中包含变量名(正如您在javascript中想要的那样),作为每个元素的键,而javascript中的值是每个元素的值。然后,遵循以下步骤:

代码语言:javascript
复制
$myVars = array();
$myVars['adjust'] = isset($_POST['adjust']) ? true : false;
$myVars['other'] = isset($_POST['other']) ? true : false;
$myVars['another'] = isset($_POST['another']) ? true : false;

<script type="text/javascript">
    <?php
    foreach( $myVars as $k => $v ):
         echo 'var ' . $k . '="' . $v . '";'; 
    ?>
</script>

干杯

票数 0
EN

Stack Overflow用户

发布于 2013-11-08 22:39:47

Mike的方法在这里很好(将所有内容都存储在一个json对象中),但是要以一种更分段的方式具体地完成您在这里所要求的内容,您可以简单地将包含的javascript库变成输出Javascript头的PHP文件。您的标记将如下所示:

代码语言:javascript
复制
<HTML>
    <?php
        if(isset($_GET['adjust'])){
            $adjust = true;
        }
        //More variabele declaring
    ?>
    <HEAD>
        <script type="text/javascript" src="externalJS.js.php?<?=http_build_query($_GET);?>"></script>
    </HEAD>
<!-- rest of the file -->

然后,您的externalJS.js.php文件看起来如下:

代码语言:javascript
复制
<?php
header("content-type: text/javascript");
?>
var adjust = "<?php Print($adjust); ?>";
//More variable 'transports' and any other PHP/Javascript code

这里的header告诉浏览器尽管使用了.php扩展,但还是将结果作为javascript对待。

另外,如果您真的想要的话,也可以告诉您need服务器将js文件解析为PHP,这样它就可以查找<?php ... ?>段并执行它们,所以您甚至不需要在文件上有一个非js扩展名:

代码语言:javascript
复制
AddType application/x-httpd-php .js

但是,在这样做时要小心,因为这意味着所有javascript文件(或者指定目录中的任何文件,如果您使用htaccess)都将被解析,如果您不小心,这可能会打开安全漏洞。

几个边注:

  1. 看看application/javascript
  2. 不要将所有标记名称大写。是的,HTML5说可以,但是W3C建议用小写作为惯例(无论是标准化还是向xhtml的任何可能的转换)。
  3. 当只使用printing或echoing时,首先使用小写(print vs Print),不要将打印出来的变量封装在括号中(print和echo是语言结构,因此它们不需要括号,在某些情况下使用它们可能会导致问题),最后,如果您在PHP中所做的一切是打印或回显,尝试使用PHP速记(大多数webserver默认理解它们):<?=$var_name;?>与<?php print($var_name);?>相同。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19869082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档