【问题标题】:Ajax POST to Cakephp Controller always give array() resultAjax POST 到 Cakephp 控制器总是给出 array() 结果
【发布时间】:2016-05-27 03:08:32
【问题描述】:

我真的很难在控制器中获得 POST 值。我对此真的很陌生..请有人给我分享一些光明..现在在黑暗中很长一段时间。 我有一个复选框,需要将所有已检查的 id 传递给控制器​​并使用该 id 来更新我的数据库。我不知道我做错了什么,尝试了所有方法和一些示例,如下所示: sending data via ajax in Cakephp

也发现了一些关于相同问题的问题,但对我帮助不大(或者可能太笨而无法理解)。我不断得到数组();

请帮助我..我的代码或我可以参考的任何链接。这里是我的代码: 我的视图脚本:

<script type="text/javascript">
$(document).ready(function(){
  $('.checkall:button').toggle(function(){
    $('input:checkbox').attr('checked','checked');

    $('#button').click( function (event) {  

      var memoData = [];
      $.each($("input[name='memo']:checked"), function(){            
        memoData.push($(this).val());
      });
      var value = memoData.join(", ")
      //alert("value are: " + value);  

      //start
      $.ajax({
        type:"POST", 
        traditional:true;
        data:{value_to_send:data_to_send}, 
        url:"../My/deleteAll/",
        success : function(data) {
        alert(value);// will alert "ok"

     },
     error : function() {
       alert("false submission fail");
     }
     });
      //end

      } ); //end of button click
  },function(){//uncheck
    $('input:checkbox').removeAttr('checked');


  });

}); 

我的控制器:

public function deleteAll(){
if( $this->request->is('POST') ) {
 // echo $_POST['value_to_send'];
 //echo   $value = $this->request->data('value_to_send');

 //or 
    debug($this->request->data);exit;

}

}

这个调试的结果是:

\app\Controller\MyController.php (line 73)

array()

请帮帮我。非常感谢

【问题讨论】:

  • 你用ajax写data:{value_to_send:data_to_send}, ,你把data_to_send放在value上吗? var value = memoData.join(", ");
  • 抱歉,它应该是一个数据:{value_to_send:value}。我以前在玩代码。但问题仍然存在。每次我调试时,它看起来好像没有任何东西被传递给控制器​​......:(
  • 你试过这个answer

标签: php jquery ajax cakephp


【解决方案1】:

这个怎么样:

jquery:

$(document).ready(function() {

    $('.checkall:button').toggle(function() {

        $('input:checkbox').attr('checked','checked');

        $('#button').click(function(event) {  

            var memoData = [];

            $.each($("input[name='memo']:checked"), function(){            
                memoData.push($(this).val());
            });

            //start
            $.ajax({
                type: 'POST', 
                url: '../My/deleteAll/',
                data: {value_to_send: memoData}, 

                success : function(data) {
                    alert(data);// will alert "ok"

                },
                error : function() {
                    alert("false submission fail");
                }
            });//end ajax

        }); //end of button click

    },function(){//uncheck

        $('input:checkbox').removeAttr('checked');

    });

}); 

在控制器中:

public function deleteAll()
{
    $this->autoRender = false;      

    if($this->request->is('Ajax')) { //<!-- Ajax Detection

        $elements = explode(",", $_POST['value_to_send']);

        foreach($elements as $element)
        {
            //find and delete
        }

    }
}

【讨论】:

  • 您好先生,非常感谢您帮助我。我尝试了您的解决方案并通过对代码进行了一些修改,我设法将这些数据传递给我的控制器。但是我有一些问题要问,我怎样才能在 foreach($elements as $element) 上进行查找和删除? .对不起,我真的输了。再次感谢
  • 最好的方法是传递 ids ($elements = ['1','3','6',...]),然后你只需要按 id 搜索。 $post = $this-&gt;Posts-&gt;get($element) 如果不是,那么只需通过某些东西查找元素,例如:'name' $post = $this-&gt;Posts-&gt;find()-&gt;where(['name' =&gt; $element])-&gt;first() 现在你可以删除元素了。 $this-&gt;Posts-&gt;delete($post)
  • 非常感谢先生帮助我理解这一点。根据需要修复和修改代码后,我设法让它工作:)
  • @winwizardy 很高兴为您提供帮助;)
【解决方案2】:

需要在ajax调用中设置数据类型为json

查询代码:

$.ajax({
  url: "../My/deleteAll/",
  type: "POST",
  dataType:'json',
  data:{value_to_send:data_to_send}, 
  success: function(data){

  }
});

【讨论】:

  • 非常感谢你,我试过了,但不知何故它仍然给了我一个错误。“错误提交失败”。当我使用 chrome 进行调试时,我发现了这个错误:message : "Unexpected token i in JSON at position 0"。所以尝试了上面的解决方案并进行了一些修改,它没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多