Ajax 使用Post-CakePHP写入会话

Ajax 使用Post-CakePHP写入会话,ajax,session,cakephp,post,edit,Ajax,Session,Cakephp,Post,Edit,我试图将复选框ID数组发布到控制器中的操作。以下是my index.ctp中的脚本: <script type="text/javascript"> $('.editSel_dialog').click(function() { var selected = []; alert('Edit Selected Has Been Clicked'); $("#[id*=LocalClocks]").each(function() {

我试图将复选框ID数组发布到控制器中的操作。以下是my 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>

$('.editSel_对话框')。单击(函数()
{
所选var=[];
警报(“已单击所选编辑”);
$(“#[id*=LocalClocks]”)。每个(函数()
{
if(false!=$(this).is(':checked'))
{
选择.push($(this).attr('id').replace('LocalClocks','');
}
});
警报(选定);
/*$.ajax(
{
键入:“POST”,
url:“/LocalClocks/editSelected/”,
数据:已选定,
传统的:是的,
//contentType:“应用程序/json”,
数据类型:“文本”,
成功:函数(数据){alert(数据);alert('Edit success');}
});*/
$.post('/LocalClocks/editSelected',{“Session”:selected},函数(数据){
警报(数据);
});
});
我有一个ajax请求和一个post请求。我一直在使用ajax,直到我看到post实际上可以修改php变量。大括号
{“Session”:selected}
中的代码应使用所选数组修改会话变量

我尝试在
$this->data
$this->request->data
$\u POST
上使用debug,但它们都是空的

我需要帮助将所选数组写入变量或其他内容。我曾想尝试编写
$this->Session
,但我不确定该怎么做


提前感谢

也许我错了,但我认为您不能直接从客户端使用ajax来实现这一点。您能否分享您关于可以修改php变量的声明的源代码?我在谷歌上搜索了一下,但运气不好,能够修改PHP会话对我来说会很奇怪。。如果说您可以使用会话固定/注入或其他恶意技术,这将是非常不安全的

编辑

用于为需要的现有变量赋值

进行ajax调用

$.post('/LocalClocks/editSelected', { "selected" : selected }, function(data){
                   alert(data);
    });
在你的控制器上有这样一个函数

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

瞧,也许我错了,但我认为您不能直接从客户端使用ajax来实现这一点。您能否分享您关于可以修改php变量的声明的源代码?我在谷歌上搜索了一下,但运气不好,能够修改PHP会话对我来说会很奇怪。。如果说您可以使用会话固定/注入或其他恶意技术,这将是非常不安全的

编辑

用于为需要的现有变量赋值

进行ajax调用

$.post('/LocalClocks/editSelected', { "selected" : selected }, function(data){
                   alert(data);
    });
在你的控制器上有这样一个函数

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

瞧,有了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']);
    }
  }
}
控制器:

$.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']);
    }
  }
}

对于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']);
    }
  }
}
控制器:

$.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']);
    }
  }
}

这是我从哪里得到的链接:。海报上说大括号中的内容将如何改变php变量的值。我的问题是我试图修改会话,但没有成功。我希望能够将数组中的数据写入php变量,但我不知道如何去做。哦,我明白了。。这里的语句为true,即您正在接收指定变量的值,而不是修改现有变量。您可以做的是接收该变量,然后在PHP上将其分配给您想要使用的$会话变量,但我将如何执行该操作。我是否只需在控制器的操作中创建一个新变量,然后将其分配给会话?我进行了更改,但现在出现以下错误:
缺少LocalClocksController::editSelected()的参数1
。你知道为什么它没有得到$selected变量吗?不过,我想我离让它工作越来越近了。谢谢。在GoogleChromeDeveloperTools上的网络选项卡上,您可以看到您正在进行的实际ajax调用。检查您是否正在发送其中的值。这是指向我从中获取该值的链接:。海报上说大括号中的内容将如何改变php变量的值。我的问题是我试图修改会话,但没有成功。我希望能够将数组中的数据写入php变量,但我不知道如何去做。哦,我明白了。。这里的语句为true,即您正在接收指定变量的值,而不是修改现有变量。您可以做的是接收该变量,然后在PHP上将其分配给您想要使用的$会话变量,但我将如何执行该操作。我是否只需在控制器的操作中创建一个新变量,然后将其分配给会话?我进行了更改,但现在出现以下错误:
缺少LocalClocksController::editSelected()的参数1
。你知道为什么它没有得到$selected变量吗?不过,我想我离让它工作越来越近了。谢谢。在GoogleChromeDeveloperTools上的网络选项卡上,您可以看到您正在进行的实际ajax调用。检查您是否正在发送firebug中的值,并查看哪些数据正在发送到服务器。尝试显示或返回$this->request->params警报()显示什么?它是一个数组,对吗?使用firebug,查看哪些数据被发送到服务器。尝试显示或返回$this->request->params警报()显示什么?这是一个阵列,对吗?非常感谢你们的帮助。这起作用了,我能够成功地发布数据。再次感谢。非常感谢你们的帮助。这起作用了,我能够成功地发布数据。再次感谢。