【问题标题】:PHP variable not recognized in jquery在 jquery 中无法识别 PHP 变量
【发布时间】:2014-09-30 19:42:18
【问题描述】:

在我的 javascript 中,我试图通过 html 名称标签传递一个 php 变量。 html 被附加到我选择的选项中。

$("#a"+$selected.val()).append('<input type="hidden" name="<?php echo $event_id; ?>" value="'+$selected.text()+'">');

这里是整个js函数,看看是怎么回事http://laravel.io/bin/Edz25

现在,我知道一个事实,并且在我的视图中测试了 $event_id 通过在我的控制器中执行以下操作并在视图中回显变量来返回一个数组。

print_r($event_id);
die();

控制器:

$data['event_id'] = $this->model_location->get_event_id();

型号:

public function get_event_id()
{

    $this->db->select('id');
    $query = $this->db->get('table_eventcards');

    return $query->result_array();


}

现在我不确定为什么我的 javascript 中的变量没有输出任何东西。

这是我检查元素时的输出。

<li data-value="28" id="a28">Event title<input type="hidden" name="<?php echo $event_id; ?>" value="Event title"></li>

如果这有帮助,这是我的控制台日志http://postimg.org/image/owtz3v8h7/

我真的需要解决这个问题并感谢所有帮助。

【问题讨论】:

  • “$ 未定义”。你在运行脚本之前加载 jQuery 吗?
  • 您确定该页面正在由 PHP 处理吗?
  • @lesssugar 该脚本位于加载 jquery 源的每个页面的页脚处的登山扣中。如果我所有其他 jquery 都在工作,我不认为这是会影响 php 变量的问题。
  • “我知道$event_id 正在返回一个数组”,您希望如何使用数组作为名称?
  • 您正在使用单独的 JS 文件或 javascript 的

标签: javascript jquery codeigniter


【解决方案1】:

HTML 中包含的 .js 文件不会被 PHP 解析,为此您可以使用

首先,将你的变量写入 php 文件:

mypage.php

 <script>
     var MY_VAR = "<?php echo $myVar; ?>";
 <script>
 <script type="text/javascript" src="my_script.js"></script>

然后你就可以在你的js文件中使用这个变量了:

my_script.js

$("#a"+$selected.val()).append('<input type="hidden" name="' + MY_VAR + '" value="'+$selected.text()+'">');

一个经过测试的例子:

<?php
     $myVar = 1;
 ?>

 <script>
     var MY_VAR = "<?php echo $myVar; ?>";
     alert(MY_VAR);
 </script>

警报输出将为“1”

【讨论】:

  • 我在php页面上添加了script标签。然后在我的 .js 页面中添加了 js 变量。将 php 变量视为字符串时,它仍然给出相同的输出。
  • 视图中设置为 php 变量的 js 变量正在传递给 .js 文件。然而,奇怪的是,警报并没有在同一个视图上工作。
【解决方案2】:

CodeIgniter's result_array() will return a multidimensional array.

您的 ActiveRecord 查询似乎不包含任何过滤(没有 WHERE 子句),因此可能会返回几行。

即使表中只有一行,结果集也会是这样的:

array (
    array(
        'id' => 1
    )
)

所以,$data['event_id'](在控制器中)和$event_id(在视图中)将包含上述数据结构。

关于变量命名的一些建议...如果一个变量包含多个内容(又名 isIterable),那么请使用复数变量名称,这样您就不会混淆您的脚本的未来开发人员(下一个开发人员实际上可能是你)。

更令人困惑的是,您似乎试图将隐藏输入的名称分配为数组——我真的不明白这里的意图。

如果你想要一个特定的id,你需要把它从数组中拉出来。如果你想迭代ids的数组,那么你需要调整你的js进程。

无论哪种方式,将数据从服务器端 (php) 传递到客户端 (javascript),如果您使用 json_encode()(避免引用和引用转义问题),您将获得长期稳定的成功。

<script>
let event_id = <?php echo json_encode($event_id); ?>;
</script>

然后确保在视图呈现上述 javascript 声明之后加载将使用 event_id 的外部脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 2017-11-19
    • 2021-02-27
    • 2013-05-15
    • 1970-01-01
    相关资源
    最近更新 更多