Вызовы Ajax работают не только в IE

#jquery #ajax #internet-explorer #codeigniter #shopping-cart

#jquery #ajax #internet-explorer #codeigniter #корзина покупок

Вопрос:

Я реализовал учебное пособие cart / jquery ajax из этой корзины codeigniter и jquery из nettuts

Он прекрасно работает во всех браузерах, кроме IE .. Я думаю, это связано с селектором css, который, возможно, более ранние версии IE не поддерживают. Чего он не делает, так это ajaxify добавления в корзину, как это предполагается. Я знаю, что сообщение выполнено успешно, но .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

Спасибо!

Комментарии:

1. я принимаю ответы, когда я их получаю

2. Вы получите ответы, когда продемонстрируете основные усилия по отладке. Требуется 10 секунд, чтобы вставить пару alert() , чтобы выяснить, вызывается ли ваш код. И требуется еще минута, чтобы увидеть, работает ли ваш код за пределами сложной области ajax. Вы не сделали ни того, ни другого, но ожидаете ответов.

3. не рядом с ПК .. может быть, не для этого вопроса, но обычно я публикую весь код. не понимаю, как помогут оповещения или куда их поместить, поскольку это работает во всех других браузерах. не уверен, что не подходит для ie .. я обновлю его здесь поздно

4. Чтобы быть уверенным, вам сначала нужно выяснить, что такое «это». Это делается путем сужения проблемы до определенной строки. Но если вы хотите просто сидеть и ждать, пока кто-нибудь посмотрит на кучу кода и скажет, что с ним не так, это нормально.

5. Как я могу сузить его, если ошибка вообще не появляется, она просто не работает в некоторых версиях IE. Сейчас утро (была поздняя ночь, когда я опубликовал изначально), поэтому я собираюсь попробовать предложения, а затем сообщу об этом. Ваше предложение не помогает. $(«#cart_content»).html(cart); работает

Ответ №1:

какое у вас эхо с сервера

echo true ; тогда вам следует использовать if(data == true)

echo 'true' ; тогда вам следует использовать if(data == 'true')

echo 1; затем вы должны использовать if($.trim(data) == 1)

попробуйте использовать $.trim(data) вместо data

надеюсь, это может быть полезно.