2

我有以下带有 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);
        }
      });
4

2 回答 2

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 数据注入自定义模板。这具有节省带宽的优势,因为您只传输一次标记(在初始页面加载时)并且从那时起仅向前传输数据

于 2012-10-02T17:18:16.320 回答
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;
}
于 2012-10-02T16:11:22.893 回答