无法在Yii中将jquery值分配给会话变量

时间:2014-01-16 08:28:26

标签: php jquery session yii

在以下代码中,值item.rmid由jQuery提供。该值是从数据库中获取的,显示在item.rmid中,并且必须存储在Yii::app()->SESSION["rid"]中,但它不起作用。

在视图中我有以下代码:

$("#pct").html('');
        $.each(<?php echo $ar; ?>, function (i, item) {

            $("#pct").append('
<div class="title">
    fss"
    <?php Yii::app()->SESSION["rid"]=' + item.rmid + ' ; ?>"
    <?php echo Yii::app()->SESSION["rid"];?>
</div>')

}

我做错了什么?

UPD  当我var_dump($ ar); 以下是我得到的

string '[{"pimg":"12.jpg","pid":"3","createdate":"2014-01-15 12:12:47","rid":"25"},{"pimg":"WP9.JPG","pid":"1","createdate":"2014-01-15 12:14:23","rid":"26"},{"pimg":"n2.jpg","pid":"4","createdate":"2014-01-16 11:01:27","rid":"54"}]

但我无法指定摆脱值.........知道我得到了它我有多个摆脱并将其分配给一个Yii :: app() - &gt; SESSION [“rid”]哪个不能在每次迭代中存储所有值...
我如何在查询字符串中传递它,但值得隐藏

2 个答案:

答案 0 :(得分:1)

如果没有 AJAX ,您无法通过javascript更新服务器上的内容。 使用ajax向服务器发送请求并使用

更新会话值
 Yii::app()->session['var'] = $_POST['received_value'];

了解ajax here

答案 1 :(得分:1)

需要注意的主要事项是,当您的浏览器运行您的javascript时,PHP部分代码已经完成。您的代码所做的只是将字符串' + item.rmid + '分配给某个PHP变量。它只是一个常量字符串,根本没有与你的javascript连接。之后,您的浏览器将获得以下javascript:

$("#pct").html('');
$.each(some_array_from_php, function (i, item) {
    $("#pct").append('
        <div class="title">
            fss""
             + item.rmid + 
        </div>')
}

注意PHP是如何“预处理”的。它甚至不是很好的javascript,因为你不能在javascript中使用多行字符串文字。

您可以做的是将一些价值从javascript推送到您的服务器。因此,您需要首先将javascript代码提供给您的浏览器,在javascript中获取您的值,然后以某种方式使另一个HTTP请求将值作为GET参数传递。有一种用于此目的的技术,称为AJAX。看看这个。

但是从您的代码示例中看起来您已经拥有服务器上的所有值(以$ar变量,采用JSON格式),因此您只需在PHP上分配会话变量并仅为客户端使用javascript-侧面可视化。

首先你需要解码JSON:

$decoded = json_decode($ar);

现在$ decode只是一个PHP对象数组,所以你可以这样做:

Yii::app()->session["rid"] = $decoded[0]->rid;

上面我们将第一个对象的“rid”存储到会话中。如果你想要存储所有这些,只需循环遍历$encoded,同时将值推送到会话,如下所示:

foreach ($decoded as $obj) {
    Yii::app()->session["rids"][] = $obj->rid;
}