如何在cakephp 2.4中实现JsonP

Kei*_*wer 2 cakephp cakephp-2.4

我刚刚升级到cakephp 2.4.1,因为它现在支持JsonP.我以前在我的ajax跨域代码中遇到了一个丢失的回调错误.然而,文档没有提到任何需要实现这一步的额外步骤,所以我认为它应该会出现,但我得到了与以前相同的错误.

我是否需要一段额外的代码来发回回调用回复?

我的控制器

public function api($mem_id = null) {
    $options = array(
        'fields' => array('Member.total_points'),
        'conditions' => array('Member.member_no' => $mem_id),
        'recursive' => -1
    );
    $members = $this->Member->find('first', $options);
    $this->set(array(
        'member' => $members,
        '_serialize' => array('member')
    ));
}
Run Code Online (Sandbox Code Playgroud)

}

ajax代码

$('document').ready(function() {
    $.ajax({
        url: 'http://mydomain.com/loyalty/members/api/5749.json',
        dataType: 'jsonp',
        success: function(response) {
            console.log(resonse);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(errorThrown);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

ndm*_*ndm 5

它应该与旧的Cake版本一起工作正常,就像我在你的另一个问题中描述的那样;)

无论如何,请查看API文档/lib/Cake/View/JsonView.php或代码中的代码.您必须定义一个名为的视图var ,它可以是一个字符串,指定保存回调函数名称的查询变量的名称,或者表示正在查找名称的默认查询变量._jsonptruecallback

因此,jQuery callback默认使用查询变量名称,定义true_jsonp应该这样做:

$this->set(array(
    'member' => $members,
    '_serialize' => array('member'),
    '_jsonp' => true
));
Run Code Online (Sandbox Code Playgroud)

如果callback在请求URL(即?callback=whatever)中找不到名为的查询变量,则会收到常规的JSON响应.

也可以看看