Php CodeIgniter在JSON响应中返回HTML
我正在尝试用codeigniter构建一个支持ajax的购物车,现在我面临一个问题:如何将响应获取为HTML,并将其编码为JSON响应,然后将响应附加到购物车页面 以下是javascript代码: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
$('.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();
}
});