用jquery ajax调用填充

时间:2013-02-13 14:43:59

标签: jquery ajax innerhtml

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

当我被电子商务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>

:&lt;! - @ Ecom:Group.ID - &gt;从电子商务系统中获取ID。

1 个答案:

答案 0 :(得分:1)

查看jQuery.ajax文档,我认为done:是一个有效的设置。我想你想在$ .ajax()返回的jqXHR对象上使用success:或调用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()文档。