有没有办法在CodeIgniter中使用jQuery JSONP而不打开查询字符串?

时间:2012-02-16 22:22:19

标签: php json codeigniter query-string jsonp

我的代码如下:

$.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)

3 个答案:

答案 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;
        });
    }

}]);

希望它有所帮助。