0

jQuery ajax を介して価格を計算するスクリプトがあり、Firebug コンソールで、同じ ajax GET 呼び出しが複数回 (場合によっては数十回) 発生していることに気付きました。関数を開始するためにjavascriptとjQueryを組み合わせて使用​​していますが、これが問題だと感じています。もっと効率的な方法を知らないだけです。

メニューから値が選択されると、関数が実行されます。そのためのコードは次のとおりです。

<div id="order_promo">
<select name="promo1" id="promo1" onmouseover="CalcPromo(1)">
<option value="1">Name1</option
.....
.....
</select>
</div>

これがjavascript/jQuery関数です:

function CalcPromo(row){
      $(function(){
         $('#promo' + row).change(function(){
                //values to pass to php script for calculations

                var promo=$(this).val();
                var id=$('#item' + row).val();
                var qty=$('#qty' + row).val();
                var price=$('#price' + row).val();

                var dataString = 'prodid='+ id + '&qty=' + qty + '&price=' + price + '&promo=' + promo + '&type=promo' + '&row=' + row ; //string passed to url
                $.ajax
                ({
                    url: "includes/ajax/orders2.php", //url of php script
                    dataType: 'json', //json is return type from php script
                    data: dataString, //dataString is the string passed to the url
                    success: function(pricedata) //pricedata is the name of json array that is returned
                    {
                        //individual values from json array
                        var listprice = pricedata["price"];
                        var disc = pricedata["disc"];
                        var total = pricedata["total"];
                        var tax = pricedata["tax"];
                        var grand = pricedata["grand"];

                        //set each value using text box id value using javascript val() function
                        $('#price' + row).val(listprice);
                        $('#discprice' + row).val(disc);
                        $('#itemprice' + row).val(total);
                        $("#tax").val(tax);
                        $("#grandtotal").val(grand);
                     },
                     error: function(request, status, error)
                     {
                         alert(request.responseText);
                     }
            });

        });

    });
    }

メニュー「promo1」から値が選択されると、関数が開始されます。これが私がそれを機能させる唯一の方法でした。これを行うための純粋なjQueryの方法であり、複数の呼び出しを排除すると思います。これは私が苦労しているところです。

ありがとう!

4

1 に答える 1