我已經實現從購物車中/ jQuery的AJAX教程的這個codeigniter cart and jquery from nettuts+Ajax調用不僅在IE
它的工作原理妙在所有瀏覽器,除了IE..I'm認爲它有一個CSS選擇這樣做也許早期版本的IE不支持。它不會做的就是加入購物車,就像它假設的那樣。我知道帖子是成功的,但.get和返回的數據加載到div不是。我知道這個帖子正在工作,因爲如果你點擊更新購物車按鈕,它會顯示所有添加的項目,Ajax應該添加和更新沒有頁面重新加載的列表。
這裏是我的JS
$(document).ready(function() {
/*place jQuery actions here*/
var link = "";
$("ul.products form").submit(function() {
// Get the product ID and the quantity
var id = $(this).find('input[name=product_id]').val();
var qty = $(this).find('input[name=quantity]').val();
$.post(link + "cart/add_cart_item", { product_id: id, quantity: qty, ajax: '1' },
function(data){
if(data == 'true'){
$.get(link + "cart/show_cart", function(cart){
$("#cart_content").html(cart);
});
}else{
alert("Product does not exist");
}
});
return false;
});
$(".empty").live("click", function(){
$.get(link + "cart/empty_cart", function(){
$.get(link + "cart/show_cart", function(cart){
$("#cart_content").html(cart);
});
});
return false;
});
});
這裏是處理PHP的Ajax調用::
<?php
class Cart extends MX_Controller { // Our Cart class extends the hmvc (MX)Controller class
function __construct()
{
parent::__construct(); // We define the the Controller class is the parent.
$this->load->model('cart_model'); // Load our cart model for our entire class
}
function index()
{
$data['products'] = $this->cart_model->retrieve_products(); // Retrieve an array with all products
$data['content'] = 'cart/cart/products'; // Select view to display
$this->load->view('index', $data); // Display the page
}
function add_cart_item(){
if($this->cart_model->validate_add_cart_item() == TRUE){
// Check if user has javascript enabled
if($this->input->post('ajax') != '1'){
redirect('cart'); // If javascript is not enabled, reload the page with new data
}else{
echo 'true'; // If javascript is enabled, return true, so the cart gets updated
}
}
}
function update_cart(){
$this->cart_model->validate_update_cart();
redirect('cart');
}
function show_cart(){
$this->load->view('cart/cart/cart.php');
}
function empty_cart(){
$this->cart->destroy();
redirect('cart');
}
function checkout(){
$numitems=$this->cart->total_items();
if($numitems>1){
//more then 1 item
$this->load->library('Paypal_Lib');
$multiproductarray=$this->cart->contents();
//echo var_dump($multiproductarray); return;
$this->paypal_lib->add_field('business', $this->config->item('paypal_email'));
$this->paypal_lib->add_field('return', site_url('paypal/success'));
$this->paypal_lib->add_field('cancel_return', site_url('paypal/cancel'));
$this->paypal_lib->add_field('notify_url', site_url('paypal/ipn')); // <-- IPN url
$this->paypal_lib->multi_items('true');
$i=1; // keeps track for _number
foreach($this->cart->contents() as $items){
$this->paypal_lib->add_field('item_name_'.$i, $items['name']);
$this->paypal_lib->add_field('item_number_'.$i, $items['id']);
$this->paypal_lib->add_field('amount_'.$i, $items['price']);
$this->paypal_lib->add_field('quantity_'.$i, $items['qty']);
// $this->paypal_lib->add_field('quantity_'.$i, '10');
$i++;
}
redirect($this->paypal_lib->paypal_get_request_link());//this sends to paypal
}else{
//1 item
$this->load->library('Paypal_Lib');
//$singleproductarray=$this->cart->contents();
//echo var_dump($singleproductarray); return;
//echo $singleproductarray['name'].$singleproductarray['id'].$singleproductarray['price']; return;
$this->paypal_lib->add_field('business', $this->config->item('paypal_email'));
$this->paypal_lib->add_field('return', site_url('paypal/success'));
$this->paypal_lib->add_field('cancel_return', site_url('paypal/cancel'));
$this->paypal_lib->add_field('notify_url', site_url('paypal/ipn')); // <-- IPN url
$this->paypal_lib->multi_items('false');
//$this->paypal_lib->add_field('item_name', $singleproductarray['name']);
// /$this->paypal_lib->add_field('item_number', $singleproductarray['id']);
//$this->paypal_lib->add_field('amount', $singleproductarray['price']);
foreach($this->cart->contents() as $items){
$this->paypal_lib->add_field('item_name', $items['name']);
$this->paypal_lib->add_field('item_number', $items['id']);
$this->paypal_lib->add_field('amount', $items['price']);
$this->paypal_lib->add_field('quantity', $items['qty']);
}
redirect($this->paypal_lib->paypal_get_request_link());//this sends to paypal
}
}
}
/* End of file cart.php */
/* Location: ./application/controllers/cart.php */
<?php
class Cart_model extends CI_Model {
// Function to retrieve an array with all product information
function retrieve_products(){
$query = $this->db->get('products');
return $query->result_array();
}
// Updated the shopping cart
function validate_update_cart(){
// Get the total number of items in cart
$total = $this->cart->total_items();
// Retrieve the posted information
$item = $this->input->post('rowid');
$qty = $this->input->post('qty');
// Cycle true all items and update them
for($i=0;$i < $total;$i++)
{
// Create an array with the products rowid's and quantities.
$data = array(
'rowid' => $item[$i],
'qty' => $qty[$i]
);
// Update the cart with the new information
$this->cart->update($data);
}
}
// Add an item to the cart
function validate_add_cart_item(){
$id = $this->input->post('product_id'); // Assign posted product_id to $id
$cty = $this->input->post('quantity'); // Assign posted quantity to $cty
$this->db->where('id', $id); // Select where id matches the posted id
$query = $this->db->get('products', 1); // Select the products where a match is found and limit the query by 1
// Check if a row has been found
if($query->num_rows > 0){
foreach ($query->result() as $row)
{
$data = array(
'id' => $id,
'qty' => $cty,
'price' => $row->price,
'name' => $row->name
);
$this->cart->insert($data);
return TRUE;
}
// Nothing found! Return FALSE!
}else{
return FALSE;
}
}
// Needed?
//function cart_content(){
// return $this->cart->total();
//}
}
/* End of file cart_model.php */
/* Location: ./application/models/cart_model.php */
請告訴我發生的是第一項被加載到購物車中(通過Ajax後,和成功),它會繼續添加項目,但除非我手動按下更新購物車按鈕,否則ajax將不會更新屏幕上的ul列表項目。問題只存在於IE
謝謝!
當我收到它們時,我會接受答案 –
當您顯示基本的調試工作時,您會收到答案。需要花費10秒鐘的時間來粘貼'alert()'來判斷你的代碼是否被調用。再花一分鐘看看你的代碼是否在複雜的ajax範圍之外工作。你既沒有做過,但你期待答案。 –
不靠近電腦..可能不是這個問題,但通常我發佈所有的代碼。沒有看到警報如何提供幫助或將它們放在哪裏,因爲這可以在所有其他瀏覽器中使用。不知道什麼是不正確的ie..ill更新tomm其在這裏遲 –