【问题标题】:how to implement JsonP in cakephp 2.4如何在 cakephp 2.4 中实现 JsonP
【发布时间】:2013-09-19 23:08:33
【问题描述】:

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

【问题讨论】:

标签: cakephp cakephp-2.4


【解决方案1】:

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

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

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

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

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

另见

【讨论】:

  • 谢谢——我缺少的是我的 ajax 调用 url 中的 .json 扩展名。如果没有 .json 扩展名,我会收到服务器错误。在没有做太多调查的情况下,我认为这与在 url 中不包含扩展名时在 headers/accept 中传递的值有关。
【解决方案2】:

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

【讨论】:

  • 不要更改lib 目录中不属于您的任何文件。当您更新或恢复 Cake,或与其他人共享您的存储库时,您更改的那些文件将被覆盖,您几乎肯定不会记得您对它们进行了哪些更改以使其正常工作。我不确定您将 callback 更改为 jsoncallback 的方法是否正确,但如果必须这样做,请扩展您想要更改的任何 Cake 类并在您自己的类中进行更改。
猜你喜欢
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 2013-02-23
  • 2013-12-16
  • 1970-01-01
  • 2014-05-15
相关资源
最近更新 更多