Есть ли способ использовать JQuery JSONP в CodeIgniter без включения строк запроса?
Мой код выглядит следующим образом:
$.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 ответа
Починил это. Это работает:
http://xxx.xx.x.x/directory/index.php/json/get_categories/?jsoncallback=?
Если последний сегмент, например, 7, URL должен быть составлен как:
http://xx.xx.x.x/directory/index.php/json/get_listing/jsoncallback/7
Кто-то еще заинтересован в этом?
Я только что сделал тест на своем сайте, чтобы объединить 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;
}
Отправьте их в URL как запрос и получите их соответствующим методом в контроллере:
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;
}
И в моей угловой фабрике строка 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;
});
}
}]);
Надеюсь, поможет.