我使用json数据类型跟随ajax调用和响应。目前我直接在js中写入数据和html标签,但我认为这不好,难以阅读。如何在Codeigniter视图中传递它们?
$.ajax({
type: "POST",
url: baseUrl + "profile/setting",
dataType: 'json',
success: function(data){
var html = "";
html += "<div>";
html += "<img src=\"" + baseUrl + data.picture + "\" />";
html += "<div>" + data.email + "</div>";
html += "<div>" + data.first_name + " " + data.last_name + "</div>";
html += "<div>" + data.address + "</div>";
html += "<div><input type=\"text\" class=\"input_text_top\"/></div>";
html += "<div><input type=\"text\" class=\"input_text_middle\"/></div>";
html += "<div><input type=\"text\" class=\"input_text_bottom\"/></div>";
html += "<div><input type=\"submit\" class=\"btn btn_grey\"/></div>";
html += "</div>";
$('#result_column').removeAttr('style').html(data);
}
});
答案 0 :(得分:4)
您有几种选择:
如果您将dataType
属性更改为dataType: 'html'
,您可以让服务器返回一个html字符串,您可以立即将其注入#result_column
。
CodeIgniter的$this->load->view()
附带第三个布尔参数。它的默认值为FALSE
。如果您传递TRUE
,$this->load->view()
函数将返回数据,而不是将其回显给浏览器。
你能做的是:
$response = $this->load->view("your_ajax_view", $data, TRUE);
//do anything you would need to with the response.
echo $response;
与Mustache,Handlebars,EJS或Underscore一样,将您返回的json数据注入自定义模板。这样做的好处是可以节省带宽,因为您只传输标记一次(在初始页面加载时),并从那一点开始传输数据。
答案 1 :(得分:2)
基本上,如果你想这样做,你只需在配置文件/设置控制器中处理它。然后在控制器的末尾加载您的视图。然后将您的ajax函数更改为仅将html作为返回的数据。像这样:
AJAX部分:
$.ajax({
type: "POST",
url: baseUrl + "profile/setting",
success: function(data){
$('#result_column').html(data);
}
});
控制器:
function setting()
{
//whatever your code is, but then just pass the json
//data you were echoing before to the view file
$data['json_stuff'] = '';//however you generat this
$this->load->view('some view file', $data);
return;
}