我很难弄清楚如何显示一些返回的JSON对象。
我的脚本是这样的:
我正在进行ajax调用,将一些参数发送到CodeIgniter控制器,在那里我用模型处理它,对数据库进行一些查询,然后将json_encoded行返回到ajax回调函数。顺便说一句,这很好。
这就是我现在想做的事情,而这正是我陷入困境的地方。我希望新的JSON对象(包含数据库行)"替换"html表中的旧行。所以我希望它根据我传递的参数更新表格,但只在头脑中。
我是jquery的新手,所以我尝试了一些东西。我尝试过对json数据进行迭代,并使用$.html(字符串)函数,但我想这会替换所有内容,最终只显示最后一个对象(我说得对吗?)。
所以我想知道在一般意义上我会怎么做?
$.ajax({
type: 'GET',
url: 'someSite.com/someEndpoint'
data: xyz.
success: function( response ) {
//lets say you have an object like this: object = { data: { ... } }
var html = '';
for(var i = 0; i<response.data.length; i++) {
html += '<tr><td>'+response.data[i].title+'</td></tr>';
}
$('#someTable tbody').html(html);
}
});
您不需要在AJAX请求中返回JSON对象。尝试将$.ajax调用的data_type
配置设置设置为"html"(或者将其留空——jQuery非常擅长从响应数据中找出它)。
我通常将视图的<tbody>...</tbody>
部分分解为它自己的视图部分。然后,"原始"页面加载可以使用它,更新AJAX调用也可以使用它。
唯一的星号是,如果您需要某种面向对象的响应以及HTML。我通常会这样做:
{
"stat": "ok",
"payload": "<tr><td>row1</td></tr><tr><td>row2</td></tr>"
}
然后在ajax成功函数中:
$.post('/controller/action', { some: 'data' }, function(response) {
$('#my_table tbody').append(response.payload);
}, 'json');
您传入的参数是什么?
例如,您可以使用select或input字段来触发ajax调用,并将其值作为param传递。
var tableObj = {
var init : function(){
//check that your selectors id exists, then call it
this.foo();
},
foo : function(){
var requestAjax = function(param){
var data = {param : param}
$.ajax({
data : data,
success : function(callback){
console.log(callback);//debug it
$("tbody").empty();//remove existing data
for(var i =0; i < callback.data.length; i++){}//run a loop on the data an build tbody contents
$("tbody").append(someElements);//append new data
}
});
}
//trigger event for bar
$("#bar").keyup(function(){
requestAjax($(this).val());
});
}
}
$(function(){
tableObj.init();
})
您的php方法
public function my_method(){
if($this->input->is_ajax_request())
{
//change the output, no view
$json = array(
'status' => 'ok',
'data' => $object
);
$this->output
->set_content_type('application/json')
->set_output(json_encode($json));
}
else
{
show_404();
}
}