如何在cakephp 2.4中实现JsonP

时间:2013-09-15 20:32:03

标签: 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')
    ));
}

}

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);
        }
    });
});

2 个答案:

答案 0 :(得分:5)

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

无论如何,请查看/lib/Cake/View/JsonView.phpAPI documentation中的代码。您必须定义名为_jsonp的视图var,它可以是指定保存回调函数名称的查询变量名称的字符串,也可以是true,这意味着名称为{的默认查询变量正在查找{1}}。

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

_jsonp

如果在请求网址中找不到名为$this->set(array( 'member' => $members, '_serialize' => array('member'), '_jsonp' => true )); 的查询变量(即callback),则会收到常规的JSON响应。

另见

答案 1 :(得分:-1)

如果这样做不起作用,请尝试将 $ jsonpParam 的值从“回调”更改为“ jsoncallback ”(在 LIB /蛋糕/视图/ JsonView.php )。为了让它工作,我必须这样做,因为jsonp请求中变量的名称是 jsoncallback ,这个包含回调的字符串。