Php CodeIgniter在JSON响应中返回HTML

Php CodeIgniter在JSON响应中返回HTML,php,jquery,ajax,json,codeigniter,Php,Jquery,Ajax,Json,Codeigniter,我正在尝试用codeigniter构建一个支持ajax的购物车,现在我面临一个问题:如何将响应获取为HTML,并将其编码为JSON响应,然后将响应附加到购物车页面 以下是javascript代码: $('.addtocart').on('click', function (event) { event.preventDefault(); var AddedQty = parseInt($('#attr-quantity').val()); $('#shoppingcar

我正在尝试用codeigniter构建一个支持ajax的购物车,现在我面临一个问题:如何将响应获取为HTML,并将其编码为JSON响应,然后将响应附加到购物车页面

以下是javascript代码:

$('.addtocart').on('click', function (event) {
    event.preventDefault();
    var AddedQty = parseInt($('#attr-quantity').val());

    $('#shoppingcart div.cart, #shoppingcart div.loading').remove();
    $('#shoppingcart').append('<div class="loading"></div>');
    shoppingcart.open();

    $.post('/mywebsite/cart/add', {
        itemId: $('.addtocart').data('itemId'),
        quantity: AddedQty
    }, function (response) { 
        var html = $(response.ShoppingCartHtml).html(); 
        shoppingcart.update(html);
        shoppingcart.close();
    });
});
下面的代码是示例代码(不是真正的代码),我想将其编码为JSON响应,即ShoppingCartHtml:

<li>
    <h3><?php echo $ProductName; ?></h3>
</li>
我们想要的正确响应示例如下所示(如Firebug所示):

如果我在Firebug控制台的JSON选项卡上检查,它应该会显示ShoppingCartHtml的html代码,并用引号括起来,作为ShoppingCartHtml JSON响应

问题是:如何将ShoppingCartHtml的html代码编码为JSON响应

PS:如果我的问题让人困惑,我深表歉意。我不喜欢英语。即使打这个问题,我也需要将近1个小时来完成。但我希望你们能理解我的要求


提前谢谢。

我想
shoppingcart
设置为从$('#…')返回的内容。那么你只需要这个:

function (response) { 
    shoppingcart.html(response.ShoppingCartHtml); 
    shoppingcart.close();
}

你差一点就搞定了。只是需要一些调整

//set the 3rd param to true to make it return data 
$theHTMLResponse    = $this->load->view('path/to/view.php', null, true);

$this->output->set_content_type('application/json');
$this->output->set_output(json_encode(array('ShoppingCartHtml'=> $theHTMLResponse)));

首先将视图调用中的第三个参数传递为
true

第三个可选参数用于更改 函数,使其以字符串形式返回数据,而不是发送数据 将其添加到浏览器中。如果要处理数据,这可能很有用 在某种程度上。如果将参数设置为true(布尔值),它将返回 数据。默认行为为false,这会将其发送到浏览器。 如果希望返回数据,请记住将其分配给变量

还可以使用
$.getJSON
并替换
$(response.ShoppingCartHtml.html()来自
响应。购物车HTML

$.getJSON('/mywebsite/cart/add', {
        itemId: $('.addtocart').data('itemId'),
        quantity: AddedQty
    }, function (response) { 
     if(response.success){
        var html = response.ShoppingCartHtml; 
        shoppingcart.update(html);
        shoppingcart.close();
      }
});

天哪!非常感谢你的帮助!我真的不知道它只是需要一个简单的调整!非常感谢你!这个问题已经困扰了我三天了!阅读您的答案后,我想起了codeigniter负载视图中的第三个参数。:)当然,“将第三个参数设置为true以使其返回数据”:
function (response) { 
    shoppingcart.html(response.ShoppingCartHtml); 
    shoppingcart.close();
}
//set the 3rd param to true to make it return data 
$theHTMLResponse    = $this->load->view('path/to/view.php', null, true);

$this->output->set_content_type('application/json');
$this->output->set_output(json_encode(array('ShoppingCartHtml'=> $theHTMLResponse)));
$theHTMLResponse= echo $this->load->view('pages/minicart.php', $data,true); //THIS LINE THROWS ERROR (I know that I cannot assign what echo-ed into a variable).
$this->output->set_content_type('application/json');
$this->output->set_output(json_encode(
array( 'sucesss'=>1, 'ShoppingCartHtml'=> $theHTMLResponse)
));
$.getJSON('/mywebsite/cart/add', {
        itemId: $('.addtocart').data('itemId'),
        quantity: AddedQty
    }, function (response) { 
     if(response.success){
        var html = response.ShoppingCartHtml; 
        shoppingcart.update(html);
        shoppingcart.close();
      }
});