Обновление jQuery не работает с IE7 / 8 - PullRequest
0 голосов
/ 10 ноября 2009

С помощью с помощью участников этого поста я преобразовал из прототипа в jQuery.

function jsUpdateCart(){
  var parameter_string = '';
  allNodes = document.getElementsByClassName("process");
  for(i = 0; i < allNodes.length; i++) {
    var tempid = allNodes[i].id;
    var temp = new Array;
    temp = tempid.split("_");
    var real_id = temp[2];
    var real_value = allNodes[i].value;
    parameter_string += real_id +':'+real_value+',';
  }

  var params = 'ids='+parameter_string;

   $.ajax({
   type: "POST",
   url: "http://127.0.0.1/codeigniter_shopping/index.php/welcome/ajax_cart",
   data: params,
   success: function( r ) {
    $('#ajax_msg').html( r );
    location.reload( true );
  }
 });

}



function jsRemoveProduct(id){
  var params = 'id='+id;
  $.ajax({
   type: "POST",
   url: "http://127.0.0.1/codeigniter_shopping/index.php/welcome/ajax_cart_remove",
   data: params,
   success: function( r ) {
    $('#ajax_msg').html( r );
    location.reload( true );
  }
 });
}

ajax_cart_remove работает как в Firefox, так и в IE, но обновление работает с Firefox, но не с IE 7/8.

Может кто-нибудь дать мне несколько советов, пожалуйста.

Вы можете увидеть исходный код прототипа здесь .

ajax_cart и ajax_cart_remove в контроллерах являются следующими.

function ajax_cart(){
    $this->MOrders->updateCartAjax($this->input->post('ids'));  
  }

  function ajax_cart_remove(){
    $this->MOrders->removeLineItem($this->input->post('id'));
  }

И модели для модеров следующие.

function removeLineItem($id){
    $id = id_clean($id);
    $totalprice = 0;
    $cart = $_SESSION['cart'];
    if (isset($cart[$id])){
        unset($cart[$id]);
        foreach ($cart as $id => $product){
            $totalprice += $product['price'] * $product['count'];
        }       
        $_SESSION['totalprice'] = $this->format_currency($totalprice);
        $_SESSION['cart'] = $cart;

        echo "Product removed.";
    }else{
        echo "Product not in cart!";
    }
}

function updateCartAjax($idlist){
    $cart = $_SESSION['cart'];
    $records = explode(',',$idlist);
    $updated = 0;
    $totalprice = $_SESSION['totalprice'];

    if (count($records)){
        foreach ($records as $record){
            if (strlen($record)){
                $fields = explode(":",$record);
                $id = id_clean($fields[0]);
                $ct = $fields[1];

                if ($ct > 0 && $ct != $cart[$id]['count']){
                    $cart[$id]['count'] = $ct;
                    $updated++;
                }elseif ($ct == 0){
                    unset($cart[$id]);
                    $updated++;
                }
            }   
        }

        if ($updated){
            $totalprice=0;
            foreach ($cart as $id => $product){
                $totalprice += $product['price'] * $product['count'];
            }       

            $_SESSION['totalprice'] = $this->format_currency($totalprice);
            $_SESSION['cart'] = $cart;

            switch ($updated){
                case 0:
                $string = "No records";
                break;

                case 1:
                $string = "$updated record";
                break;

                default:
                $string = "$updated records";
                break;
            }
            echo "$string updated";

        }else{
            echo "No changes detected";

        }
    }else{
        echo "Nothing to update";

    }
}

Ниже приведен вывод html формы

<form action="http://127.0.0.1/codeigniter_shopping_copy2/index.php/welcome/checkout" method="post"><table border='1' cellspacing='0' cellpadding='5'>
<tr valign='top'>
<td><input type="text" name="li_id[10]" value="1" id="li_id_10" class="process" size="5"  /></td>
<td id='li_name_10'>Dress 1</td>
<td id='li_price_10'>33.95</td>
<td id='li_total_10'>33.95</td>
<td><input type='button' name='delete' value='delete' onclick='jsRemoveProduct(10)'></td>
</tr>
<tr valign='top'>

<td><input type="text" name="li_id[6]" value="2" id="li_id_6" class="process" size="5"  /></td>
<td id='li_name_6'>Shoes 1</td>
<td id='li_price_6'>23.95</td>
<td id='li_total_6'>47.90</td>
<td><input type='button' name='delete' value='delete' onclick='jsRemoveProduct(6)'></td>
</tr>
<tr valign='top'>
<td colspan='3'>&nbsp;</td>
<td colspan='2'>81.85 
<input type="hidden" name="name" value="total" />
<input type="hidden" name="id" value="total" />
<input type="hidden" name="value" value="81.85" />
</td>
</tr>

<tr valign='top'>
<td colspan='3'>&nbsp;</td>
<td colspan='2'><input type='button' name='update' value='update' onclick='jsUpdateCart()'/></td>
</tr>
<tr valign='top'>
<td colspan='3'>&nbsp;</td>
<td colspan='2'><input type="submit" name="submit" value="checkout"  /></td>
</tr>
</table>
</form>

Ответы [ 2 ]

3 голосов
/ 10 ноября 2009

Я не думаю, что IE поддерживает document.getElementByClassName ("")

Попробуйте заменить

allNodes = document.getElementsByClassName("process");

с

allNodes = $(".process");

что такое JQuery.

0 голосов
/ 10 ноября 2009

В IE8 просто откройте Web Developer Toolkit и поставьте точку останова в этой строке:

$('#ajax_msg').html( r );

Я бы также поставил точку останова на .ajax звонке здесь:

var params = 'ids='+parameter_string;

   $.ajax({

тогда посмотри что получится.

Таким образом, вы можете убедиться, что вы добираетесь до него должным образом, иначе у IE может возникнуть проблема до того, как вы сюда попали, или, если вы попали сюда, вам нужно посмотреть, идет ли он в сервис и обратно, что первый URL скажет вам. Затем пошагово пройдитесь по коду success и посмотрите, выпадет ли он в какой-то момент из-за ошибки.

Как только вы точно знаете, что этот код является проблемой, вы можете обновить то, что вы узнали, но я использовал эту функцию в IE7 и 8, поэтому она должна работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...