【问题标题】:Problem during AJAX Request to CakePHP Plugin对 CakePHP 插件的 AJAX 请求期间的问题
【发布时间】:2011-08-05 12:36:53
【问题描述】:

我正在开发一个扩展基本 cakePHP 平台的插件。这个插件包括一个控制器,它将被一个外部 ajax 请求与 jQuery 调用。整个架构是客户端-服务器架构。问题是,如果我将数据发送到插件的控制器,$this->data 值始终为空。有谁知道问题出在哪里?代码如下:

// client code
$('#upload').click(function() {

        // data for testing
        var media = {};
        media.name = 'Rihanna - S and M';
        media.userid = 5;
        media.description = 'Song of Rihanna';
        media.rating = 4;
        media.comments = new Array();

        var comment = {};
        comment.id = 1;
        comment.user_id = 2;
        comment.text = 'good';
        media.comments.push(comment);

        var comment2 = {};
        comment2.id = 2;
        comment2.user_id = 3;
        comment2.text = 'nice';
        media.comments.push(comment2);


        var json = $.toJSON(media);

        $.ajax({
            url:'http://server.localhost/mediamanager/connectors/add',
            async: false,
            dataType: 'json',
            type:'POST',
            data:json,
            success:function(response) {
                console.log(response);
            },
            error:function(response, status, text) {
                console.log(response);
                console.log(status);
                console.log(text);
            }
        })

    });

这里是 cakephp 代码。另一件事是 $this->RequestHandler->isAjax() 在我发出 ajax 请求时总是返回错误。

// server code
function add()
{

    if ($this->RequestHandler->prefers() == 'json') {
            Configure:: write('debug', 0);
            $this->autoRender = false;
            $this->layout = 'ajax';
            if(empty($this->data)) {
                echo "data is empty";
            } else {        
                echo "data received";
            }   

    } 

}

我希望任何人都可以提供帮助,因为这件事让我发疯了。

【问题讨论】:

    标签: jquery ajax json cakephp plugins


    【解决方案1】:

    您需要将数据发布为“数据”,使用当前设置,您将在$this->params['form'] 中找到您的发布数据。

    或者,您可以通过修改 ajax 请求中的行将 postdata 直接提交到 $this->data:

    data: {data: json}
    

    【讨论】:

    • 感谢您的回复,这就是问题所在。但是为什么isAjax函数总是假的呢?
    • @Siggy 不知道为什么不看更多代码,也许再做一个问题
    【解决方案2】:

    也许你应该尝试 $this->params['isAjax'] == 1 而不是 $this->RequestHandler->isAjax(),但记得先在控制器中添加“RequestHandler”组件。 ;) 使用它来查看您获得的数据 pr($this->params);

    【讨论】:

      猜你喜欢
      • 2016-12-03
      • 2011-05-01
      • 2023-03-03
      • 2021-04-20
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多