【问题标题】:handle JSONP calls in ZEND在 ZEND 中处理 JSONP 调用
【发布时间】:2011-07-19 21:19:39
【问题描述】:

无法通过搜索(或谷歌)找到答案,所以我会自己问。 是否可以处理对 zend 框架的 JSONP 调用?

只找到这个页面:

http://framework.zend.com/wiki/display/ZFPROP/Zend_Json_Server+-+Lode+Blomme

但我不确定它是否已经实现!?

谢谢

【问题讨论】:

    标签: php jquery ajax zend-framework jsonp


    【解决方案1】:

    JSONP 只是一个 JSON 响应,包装在客户端上执行的指定回调函数中。

    Zend_Json_Server 目前用于 JSON-RPC。您找到的链接是添加 JSONP 支持的存档(未实现)提案。

    好消息是您不需要任何类型的框架来支持 JSONP。假设$response是你希望返回给用户的数据,而$callbackcontains the sanitized callback

    echo $callback, '(', json_encode($response), ');';
    

    多田,你已经 JSONP 了。

    请仔细阅读我链接的有关清理回调的文档。未能清理回调可能会导致可利用的条件。

    【讨论】:

    • 嗨,查尔斯。感谢您的快速回复。我知道我不必使用任何框架,但如果我已经是... :) 将阅读有关消毒的文档并尝试使用 zend 框架来实现它。如果有效,将发布。谢谢
    • 终于有时间检查这个了——它真的很好用。谢谢。
    【解决方案2】:

    对于那些使用 ZEND 框架并想知道我必须更改哪些内容才能使其正常工作的人...

    必须对几个文件进行更改:

    1) 在 VIEWS > LAYOUTS 下添加了一个名为 json.phtml 的新布局

    <?php  
        header('Content-type: application/javascript');  
        echo $this->layout()->content;  
    ?>
    

    2) 控制器

    添加了一个名为 jsonAction 的新动作

    public function jsonAction()  
    {
        $this->_helper->layout->setLayout('json');  
    
        $callback = $this->getRequest()->getParam('callback');
        if ($callback != "")
        {
            // strip all non alphanumeric elements from callback
            $callback = preg_replace('/[^a-zA-Z0-9_]/', '', $callback);
        }  
        $this->view->callback = $callback;  
    
        // ...  
    }
    

    3) 在 VIEWS > SCRIPTS > json.phtml 下添加了一个新视图

    <?php  
    if ($this->callback != "")  
    {  
        echo $this->callback, '(', json_encode($response), ');';   
    }  
    else  
    {  
        echo json_encode($response);  
    }
    ?>
    

    现在我可以像这样通过 jquery 进行 ajax 调用:

    $.ajax({
        type: "GET",
        url: 'http://<your_url>/<your_controller>/json',
        data: {},
        dataType: "jsonp",
        success: function(json) {
            console.log("success");
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log("error("+jqXHR+", "+textStatus+", "+errorThrown+")");
        }
    });
    

    也许这对某人有帮助...

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 2014-01-27
      • 1970-01-01
      • 2012-06-05
      • 2011-12-02
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 2017-08-21
      相关资源
      最近更新 更多