如何将json数据传递到codeigniter视图

时间:2012-10-02 14:55:45

标签: jquery ajax json codeigniter view

我使用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);
        }
      });

2 个答案:

答案 0 :(得分:4)

您有几种选择:

1。从CodeIgniter视图生成HTML:

如果您将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;

2。使用模板系统

MustacheHandlebarsEJSUnderscore一样,将您返回的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;
}