我正在使用Phil Sturgeon的CodeIgniter RESTful接口https://github.com/philsturgeon/codeigniter-restserver,它似乎工作得很完美。
在另一个服务器上,我试图使用jQuery来检索json数据。
首先,我检查了我的js是否通过使用jQuery文档中的flickr示例搞砸了。这工作正常。
但是当我替换我的url时,我似乎没有得到任何响应。
$.getJSON("http://myurl/apps/api/micronews/community/db/mydb/city/mycity/format/json/?jsoncallback=?",
function(data) {
console.log ('show me the data');
});
我也试过类似的ajax请求:
$.ajax({
url: "http://myurl/apps/api/micronews/community/db/mydb/city/mycity/format/json/",
dataType: 'jsonp',
success: function(results){
console.log(results);
}
});
外部服务器的访问日志显示GET请求到/apps/api/microonews/community/db/mydb/city/mycity/format/json/?callback=jQuery151029825189273083685_1310236439746&_=1310236439748和一个200的响应。
从浏览器直接点击该页面返回json编码的数据。
由于GET参数在URL字符串中,因此CodeIgniter没有正确配置应该不会成为问题。访问日志似乎表明GET请求没有问题。
解决方案为我工作:在application/config/config.php
中进行以下更改:
$config['uri_protocol'] = "PATH_INFO";
$config['enable_query_strings'] = TRUE
我想这就是安全过滤功能起作用的原因。
http://codeigniter.com/user_guide/libraries/input.html在调用新控制器时自动调用安全过滤功能。它执行以下操作:
如果$config['allow_get_array']为FALSE(默认为TRUE),将破坏全局GET数组。
所以,尝试$config['allow_get_array'] = TRUE
或使用Post方法
试试:
$.getJSON("http://myurl/apps/api/micronews/community/db/mydb/city/mycity/format/json/?callback=?",
function(data) {
console.log ('ready to handle data');
});
为什么不只是使用$.ajax()
,然后你可以通过crossDomain:true
而不是担心json回调包装?