我的代码如下:
$.getJSON("http://xx.xx.x.x/directory/index.php?c=json&m=get_listing&jsoncallback=?", { action:'listings' }, function(data) {
// code
});
这很好用。但是现在我遇到了很多麻烦,其他库在启用查询字符串的情况下不友好。如果我关闭查询字符串,并将上面的URL更改为:
http://xx.xx.x.x/directory/index.php/json/get_listing/jsoncallback=?
不起作用。关于解决方案的任何想法?
编辑:
当我关闭查询字符串时,使用它:
http://xx.xx.x.x/directory/index.php/json/get_listing/jsoncallback=?
Safari的控制台显示以下错误:
GET http://xx.xx.x.x/directory/index.php/json/get_listing/jsoncallback=jQuery17102770626428537071_1329431463691?action=categories&_=1329431463695 400 (Bad Request)
答案 0 :(得分:1)
修正了它。这有效:
http://xxx.xx.x.x/directory/index.php/json/get_categories/?jsoncallback=?
答案 1 :(得分:0)
如果最后一个段是例如7,则url必须组成为:
http://xx.xx.x.x/directory/index.php/json/get_listing/jsoncallback/7
答案 2 :(得分:0)
有人还对此感兴趣吗?
我刚在我的网站上进行了测试,结合了Angular,Jsonp和CodeIgniter,效果很好。
但我担心安全问题。
如果有人对此提出建议,我将不胜感激
而不是将参数直接发送到控制器URL,如下所示:
public function getObjectJson($page=null,$limit=null,$search=null){
if($page==null||$page<1){
$page=1;
}
if($limit==null||$limit<1){
$limit=10;
}
$objects=$this->Objects_model->getObjectsJson($page,$limit,$search);
echo $objects;
}
将它们作为查询发送到网址中,并使用控制器中的相应方法获取它们:
public function getObjectsJsonp(){
$page=$this->input->get('page');
if($page==null||$page<1){
$page=1;
}
$limit=$this->input->get('limit');
if($limit==null||$limit<1){
$limit=10;
}
$search=$this->input->get('search');
$objects=$this->Objects_model->getObjectsJson($page,$limit,$search);
$var=$this->input->get('json_objectCallback');
echo $var.$objects;
}
在我的Angular工厂中,URL字符串被设置为查询
objectsApp.factory('objectsFactory', ['$http',function($http) {
return {
getObjectsP: function(p1,p2,p3) {
//The callback function is harcoded and the prarmeters comes from the angular controller
return $http.jsonp("<?=base_url()?>Objects/getObjectsJsonp/?callback=json_objectCallback&page="+p1+"&limit="+p2+"&search="+p3).then(function(result) {
objects = result.data;
console.log(objects);
return objects;
});
}
}]);
希望它有所帮助。