2

我刚刚升级到 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);
        }
    });
});
4

2 回答 2

5

正如我在您的另一个问题中所描述的那样,它应该也适用于较旧的 Cake 版本;)

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

因此,由于 jQuerycallback默认使用查询变量名称,定义truefor_jsonp应该这样做:

$this->set(array(
    'member' => $members,
    '_serialize' => array('member'),
    '_jsonp' => true
));

callback如果在请求 URL (ie) 中找不到命名的查询变量?callback=whatever,您将收到一个常规的 JSON 响应。

也可以看看

于 2013-09-15T20:55:33.890 回答
-1

如果这不起作用,请尝试将$jsonpParam的值从“回调”更改为“ jsoncallback ”(在lib/Cake/View/JsonView.php 中)。我必须这样做才能使它工作,那是因为 jsonp 请求中的变量名称是jsoncallback,这个包含回调的字符串。

于 2014-01-26T21:45:12.297 回答