【问题标题】:CakePHP: Controller Response for Ajax Request is wrongCakePHP:Ajax 请求的控制器响应错误
【发布时间】:2010-09-02 04:03:57
【问题描述】:

我正在使用 jQuery 向某些控制器操作发出 AJAX 请求。此请求是从同一控制器中编辑操作视图中的按钮激活的。

我的问题: Ajax 请求返回编辑视图的所有代码(包括所有表单和输入),而不是预期的数字。如果我将相同的 ajax 按钮放在添加操作的视图中,它会完美运行(它返回数字)。

编辑和添加操作保持默认生成(使用烘焙)。

这是发出ajax请求的jQuery函数

        $.ajax({
            type: 'POST',
            url: 'checkTargets',
            data: {target: tgt_array, channel: channel_type},
            success:function(data){
                $('#num_subscribers > span').html(data);
            },
            error:function(){
                $('#num_subscribers > span').html("The subscribers could not be loaded");
            },
            timeout: 5000
        });
    } 

这是动作

function checkTargets() {
        if ($this->RequestHandler->isAjax()) { 
            if(!empty($this->params['form'])) {
                $data = $this->params['form'];

                if ($data['channel'] === 'SMS') {
                    $channel = 'sms';
                } else {
                    $channel = 'pin';
                }

                $targets = $this->processPostTargets($data['target']);
                $this->RequestHandler->respondAs('text');
                //This echo a NUMBER
                echo ClassRegistry::init('Selection')->countSubscribersInTarget($channel, $targets);

                Configure:: write('debug', 0);
                $this->autoRender = false;
                exit();

            }
        } 

    }

为什么会这样?

谢谢

【问题讨论】:

    标签: jquery ajax cakephp cakephp-1.3


    【解决方案1】:

    只是一个建议,无法访问所有内容,您尝试过吗?

    $this->autoRender = false;
    $this->layout = 'ajax';
    

    另外我建议保持简单:

    $.post("/controller/checkTargets", function(data) {
       alert(data);
    }
    
    function checkTargets() {
      $this->autoRender = false;
      $this->layout = 'ajax';
      echo "Im working";
    }
    

    然后从那里出发。

    【讨论】:

    • 谢谢小猴子。我试过了,但我发现问题可能出在 URL 参数上。我将 '/myapp/campaigns/checkTargets' 的 'checktargets' 更改为有效。
    • @Jose 我建议不要让您的问题悬而未决,而是添加您的答案并将其标记为您的首选答案(通过单击对勾)。避免人们认为您仍在等待答案。
    • 是的,我会这样做的。我想确定问题已经解决。再次感谢
    【解决方案2】:

    我解决了这个问题。这是 .ajax 函数中的 URL 参数(菜鸟错误)

    它应该是控制器中引用操作的完整路径。

    这个问题帮助我理解了问题: best practice to use action url while calling ajax in cakePHP

    固定的 Ajax 请求:

        $.ajax({
            type: 'POST',
            url: '/myapp/campaigns/checkTargets',
            data: {target: tgt_array, channel: channel_type},
            success:function(data){
                $('#num_subscribers > span').html(data);
            },
            error:function(){
                $('#num_subscribers > span').html("The subscribers could not be loaded");
            },
            timeout: 5000
        });
    

    谢谢并原谅我的英语

    【讨论】:

    • 嘿,url中的'myapp'是什么?
    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 2018-10-21
    • 2015-07-11
    • 2013-11-29
    • 2019-10-17
    • 2023-03-23
    • 2020-11-08
    • 1970-01-01
    相关资源
    最近更新 更多