0

一連の のそれぞれに対して ajax 呼び出しを行い、td の内部 html を ajax 呼び出しから処理されたデータに置き換えようとしています。

私は e コマース CMS システムにロックされているため、私の ajax 呼び出しは次の文字列を含む完全なページです: **!#249,00!#349,00**!#5 ltr!#**

以下のコードは、これを次のように分割します

var plabels = ['','5 ltr',''];

注: pprices の数字は、ピリオドの代わりにコンマを使用します。

問題は、最後の行: $(this).html(endprice); です。新しい値ではなく、デフォルト値 '999999' でセルを埋めます。ajax呼び出しが完了する前に行が実行されるようです。

for ループで見つかったデータが確実に td に送信されるようにするにはどうすればよいですか?

私の現在のコードはこれです:

  $(".pricetag").each( function() {
  var pgroup = $(this).attr('group');
  var plink = "Default.aspx?ID=14&groupid=" + pgroup + "&mode=-1";
  var endprice = "999999";
  var endlabel = "";
  $.ajax({url:plink,done:function(result){
    pprices = result.split("**")[1];
    plabels = result.split("**")[2];
    prices = pprices.split("!#");
    labels = plabels.split("!#");
    for(i=0;i<prices.length;i++) { 
        j=parseInt(prices[i]); k=parseInt(endprice); 
        if(j!=0 && j<k) { endprice = prices[i]; endlabel = labels[i]; }}
  }});
  $(this).html(endprice);
  });

HTML:

<table><tr>
  <td> label </td>
  <td class="pricetag" group="<!--@Ecom:Group.ID-->"> price </td>
</tr></table>

<!--@Ecom:Group.ID--> は、e コマース システムから ID を取得します。

4

1 に答える 1

1

done:jQuery.ajax のドキュメントを見ると、有効な設定のようには見えません。success:$.ajax() から返された jqXHR オブジェクトに対して、どちらかを使用するか、done() を呼び出したいと思います。

そうは言っても、「ajax呼び出しが完了する前に行が実行される」というあなたの仮定は正しいです...その行を成功ハンドラー関数に移動する必要があります。

$.ajax({url:plink,
        context: $(this),
        success:function(result){
            pprices = result.split("**")[1];
            plabels = result.split("**")[2];
            prices = pprices.split("!#");
            labels = plabels.split("!#");
            for(i=0;i<prices.length;i++) { 
                j=parseInt(prices[i]); k=parseInt(endprice); 
                if(j!=0 && j<k) { endprice = prices[i]; endlabel = labels[i]; }}
            $(this).html(endprice);
       }});

thisから渡すコンテキスト設定を追加したことに注意してくださいeach()。これにより、成功関数は正しい で動作しますthis

私はこれをテストしませんでした。しかし、私はそれがうまくいくと信じています。問題がある場合は、 jQuery.ajax()のドキュメントを確認してください。

于 2013-02-13T15:11:39.767 に答える