微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax – 与cakephp的简单json响应

我试图将一些json传递给cake PHP 2.5中的控制器并再次返回它,以确保它完全正常.

但是我没有回复内容.只有200个成功.从阅读文档我的印象是,如果我传递一些json,那么responseHandler将返回json作为响应.

不确定我错过了什么.

数据被传递

var neworderSer = $(this).sortable("serialize");

这使

item[]=4&item[]=3&item[]=6&item[]=5&item[]=7

appController.PHP

public $components = array(
    'DebugKit.Toolbar','Search.Prg','Session','Auth','RequestHandler'
);

index.ctp

$.ajax({
        url: "/btstadmin/pages/reorder",type: "post",dataType:"json",data: neworderSer,success: function(Feedback) {
            notify('Reordered pages');
        },error: function(e) {
            notify('Reordered pages Failed',{
                status: 'error'
            });
        }
    });

PagesController.PHP

public function reorder() {

    $this->request->onlyAllow('ajax');
    $data = $this->request->data;
    $this->autoRender = false;
    $this->set('_serialize','data');

}

更新:
我现在已经将以下内容添加到routes.PHP

Router::parseExtensions('json','xml');

我已将控制器更新为

$data = $this->request->data;

    $this->set("status","OK");
    $this->set("message","You are good");
    $this->set("content",$data);
    $this->set("_serialize",array("status","message","content"));

现在一切都很完美.

解决方法

应提供适当的Accept标头或扩展名

为了使请求处理程序能够选择正确的视图,您需要发送相应的Accept标头(application / json),或者在您的情况下提供扩展名.json.并且为了完全识别扩展,需要启用扩展解析.

http://book.cakephp.org/…views.html#enabling-data-views-in-your-application

该视图仅序列化视图变量

JSON视图仅自动序列化视图变量,并且从您显示代码看起来不像您设置了名为data的视图变量.

http://book.cakephp.org/…views.html#using-data-views-with-the-serialize-key

需要呈现视图

除非有充分的理由,否则不应禁用auto rendering,并且在您的情况下最终也会手动调用Controller:render().目前,您的操作甚至都不会尝试渲染任何内容.

CakeRequest :: onlyAllow()用于HTTP方法

CakeRequest :: onlyAllow()(其btw是deprecated as of CakePHP 2.5)用于指定允许的HTTP方法,即GET,POST,PUT等.虽然使用任何可用的检测器(例如ajax)都可以工作,但您可能不应该依赖它.

长话短说

你的reorder()方法看起来应该更像这样:

public function reorder() {
    if(!$this->request->is('ajax')) {
        throw new BadRequestException();
    }
    $this->set('data',$this->request->data);
    $this->set('_serialize','data');
}

最后,如果您不想/不能使用Accept标头,则需要将.json扩展名附加到AJAX请求的URL:

url: "/btstadmin/pages/reorder.json"

并因此在routes.PHP中启用扩展解析,如:

Router::parseExtensions('json');

PS

有关在不使用扩展名的情况下使用JSON视图的方法,请参阅Cakephp REST API remove the necessity of .format.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐