0

我正在尝试为一系列 ' 中的每一个进行 ajax 调用,并将 td 的内部 html 替换为来自 ajax 调用的已处理数据。

由于我被锁定到电子商务 cms 系统,我的 ajax 调用是一个完整的页面,其中包含以下字符串:**!#249,00!#349,00**!#5 ltr!#**

下面的代码将其拆分为:
var pprices = ['','249,00','349,00'];
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--> 从电子商务系统中获取一个 id。

4

1 回答 1

1

查看 jQuery.ajax 文档,在我看来它不是done:一个有效的设置。我认为您想在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 回答