0

我正在尝试将一组复选框 ID 发布到我的控制器中的操作。这是我的 index.ctp 中的脚本:

<script type="text/javascript">
$('.editSel_dialog').click(function()
{
    var selected = [];
    alert('Edit Selected Has Been Clicked');

    $("#[id*=LocalClocks]").each(function()
        {
        if(false != $(this).is(':checked'))
        {
            selected.push($(this).attr('id').replace('LocalClocks', ''));
        }
    });
    alert(selected);
    /*$.ajax(
    {
        type: 'POST',
        url: "/LocalClocks/editSelected/",
        data: selected,
        traditional: true,
        //contentType: "application/json",
        dataType: "text",
        success: function(data){ alert(data); alert('Edit Success');}
    });*/
    $.post('/LocalClocks/editSelected', { "Session" : selected }, function(data){
                   alert(data);
    });
});
</script>

我有一个 ajax 请求和一个 post 请求。我一直在使用 ajax,直到我看到帖子实际上可以修改 php 变量。大括号中的代码{ "Session" : selected }应使用选定的数组修改 Session 变量。

我尝试在$this->data, and $this->request->data, and上使用调试$_POST,但它们都是空的。

我需要帮助将选定的数组写入变量或其他东西。我正在考虑尝试写信给,$this->Session但我不确定我将如何去做。

提前致谢

4

2 回答 2

2

使用 Cake,要在 中获取发布的值$this->request->data,它们的名称必须带有前缀data

Javascript:

$.post('/LocalClocks/editSelected', { "data[Session][selected]" : selected }, function(data){
               alert(data);
});

控制器:

function editSelected()
{
  if($this->request->is('post'))
  {
    if(isset($this->request->data['Session']['selected']))
    {
      $this->Session->write('selected', $this->request->data['Session']['selected']);
    }
  }
}
于 2012-06-27T06:33:49.780 回答
1

也许我错了,但我认为你不能直接从客户端使用 ajax 做到这一点。你能分享你关于你可以修改 php 变量的声明的来源吗?我在谷歌上搜索,但没有运气,我能修改 PHP 会话会很奇怪.. 这真的很不安全,说你可以使用会话固定/注入或其他恶意技术

已编辑

要在您需要的现有变量上分配值

进行ajax调用

$.post('/LocalClocks/editSelected', { "selected" : selected }, function(data){
                   alert(data);
    });

在您的控制器上,您将拥有这样的功能

function editSelected($selected){
$_SESSION["selected"] = $selected;
}

于 2012-06-26T19:00:59.987 回答