【发布时间】:2013-08-09 16:47:51
【问题描述】:
我打算在 yii 中创建一个 Restful API 用于跨域通信。据我研究,跨域通信只能通过jsonp完成,我的实现如下:
UsersController::actionCrossDomain
公共函数 actionCrossDomain(){ $this->布局=假; $data['data']['User']['name']='Johny'; $this->_sendResponse(200, CJSON::encode($data),'application/json'); }UsersController::_sendResponse 方法与您在 :Click here 中看到的相同
在我使用虚拟主机配置的另一台服务器上,我通过 ajax 调用上述方法:
$( 文档 ).ready(function() { $.ajax({ 类型:“发布”, 数据类型:“jsonp”, url:'http:'http//uxaserver.local/alpha2/app/users/crossDomain', 数据:空, 处理数据:假, 跨域:是的, 内容类型:“应用程序/json”, 成功:函数(数据){ console.log("完成"); }, 错误:功能(请求,状态,错误){ 控制台.log(请求); } }); });问题是我的萤火虫在抱怨:
语法错误:标签无效
我的要求是这样的,因为我正在帮助我的客户对他的其他网站进行一些定制的分析,我需要在他的不同域的网页中放置一个脚本,以便将分析数据记录在主服务器中。我了解我需要使用其余接口进行通信,因此我采用了这种方法。我不确定我是否采取了正确的方法,请指教。我想以一种客户端拥有 api 密钥并且可以与我提供的 api 进行通信的方式来实现。
还有其他方法可以做到这一点吗?而不是jsonp?
【问题讨论】:
-
您可以尝试 getJson api.jquery.com/jQuery.getJSON 以
callback=?结束您的网址并确保您的回复是$get['callback'].'('.yourJSONData.')' -
我已经尝试过了,但我想知道这是否是客户端调用 api 的正确方法
-
是的,这就是 jsonp 的工作方式。您可以尝试使用 cors 标头,但 jquery(带有 IE)不支持它,因为 IE 不能正确支持它。 en.wikipedia.org/wiki/JSONPcors 的链接:en.wikipedia.org/wiki/Cross-origin_resource_sharing
标签: javascript jquery api rest yii