我正在使用Codeigniter并尝试使用jQuery自动完成功能。我也在为Codeigniter使用@Phil Sturgeon客户端休息库,因为我从netflix获取自动完成数据。我返回正确的JSON,我可以使用
访问第一个元素response(data.autocomplete.autocomplete_item[0].title.short);
但是当我循环结果时
for (var i in data.autocomplete.autocomplete_item) {
response(data.autocomplete.autocomplete_item[i].title.short)
}
它就像一个字符串。让我们说结果是“Swingers”,它会返回:
Object.value = s
Object.value = w
Object.value = i
等等。
js:
$("#movies").autocomplete({
source: function(request, response) {
$.ajax({
url: "<?php echo site_url();?>/welcome/search",
dataType: "JSON",
type:"POST",
data: {
q: request.term
},
success: function(data) {
for (var i in data.autocomplete.autocomplete_item) {
response(data.autocomplete.autocomplete_item[i].title.short);
}
}
});
}
}).data("autocomplete")._renderItem = function(ul, item) {
//console.log(item);
$(ul).attr('id', 'search-autocomplete');
return $("<li class=\""+item.type+"\"></li>").data( "item.autocomplete", item ).append("<a href=\""+item.url+"\">"+item.title+"</a>").appendTo(ul);
};
控制器:
public function search(){
$search = $this->input->post('q');
// Run some setup
$this->rest->initialize(array('server' => 'http://api.netflix.com/'));
// set var equal to results
$netflix_query = $this->rest->get('catalog/titles/autocomplete', array('oauth_consumer_key'=>$this->consumer_key,'term'=> $search,'output'=>'json'));
//$this->rest->debug();
//$json_data = $this->load->view('nice',$data,true);
//return $json_data;
echo json_encode($netflix_query);
}
json return
{"autocomplete":
{"autocomplete_item":[
{"title":{"short":"The Strawberry Shortcake Movie: Sky's the Limit"}},
{"title":{"short":"Futurama the Movie: Bender's Big Score"}},
{"title":{"short":"Daffy Duck's Movie: Fantastic Island"}}
...
任何想法? 感谢。
有一些控制台日志与返回
the url
答案 0 :(得分:0)
in
不能用数组做你想做的事。使用$.each
答案 1 :(得分:0)
据我所知,for (property in object)
表示您希望访问其每个属性,而不是通过索引访问它们。如果要通过索引访问它们,您可能希望使用标准for
循环。
for (i = 0; i <= 10; i++) {
response(data.autocomplete.autocomplete_item[i].title.short);
}
或者如果您仍想使用您的代码,请尝试以下操作:
for (i in data.autocomplete.autocomplete_item) {
response(i.title.short);
}
我还没有测试过,但我认为你有这个想法。
答案 2 :(得分:0)
好吧我想出了我需要发送到自动完成响应方法的正确格式:
视图
$("#movies").autocomplete({
minLength: 2,
source: function(request, response) {
$.post("<?php echo base_url();?>welcome/search", {q: request.term},
function(data){
//console.log(data);
response(data);
}, 'json');
}
});
控制器:
$search = $this->input->post('q');
// Run some setup
$this->rest->initialize(array('server' => 'http://api.netflix.com/'));
// Pull in an array
$netflix_query = $this->rest->get('catalog/titles/autocomplete', array('oauth_consumer_key'=>$this->consumer_key,'term'=> $search,'output'=>'json'),'json');
$json = array();
foreach($netflix_query->autocomplete->autocomplete_item as $item){
$temp = array("label" => $item->title->short);
array_push($json,$temp);
}
echo json_encode($json);
需要的是将一组对象发送回视图。谢谢你们所有的答案和帮助!!