【问题标题】:Fill a <td> with a jquery ajax call用 jquery ajax 调用填充 <td>
【发布时间】:2013-02-13 14:43:58
【问题描述】:

我正在尝试为一系列 ' 中的每一个进行 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>

从电子商务系统中获取一个 id。

【问题讨论】:

  • 我不会为每个 td 发出多个 ajax 请求,这似乎很昂贵。我会打一个电话并返回数据,然后根据这些数据创建一个新表。

标签: jquery ajax innerhtml


【解决方案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);
       }});

请注意,我添加了上下文设置,从each() 传入this,以便成功函数使用正确的this

我没有测试这个。但我相信它应该工作。如果遇到问题,您可能需要查看jQuery.ajax() 文档。

【讨论】:

  • 这能以某种方式在服务器而不是客户端运行吗?现在它在页面加载时执行。正如上面评论中提到的,这是一个缓慢的过程......
  • 通常,人们会使用这样的代码在页面加载后使用新信息更新页面,以避免重新加载大量未更改的内容。如果您只在页面加载时运行它,并且您正在为一堆值执行此操作,那么将处理移动到服务器可能是一个好主意。你将如何去做取决于你在服务器上使用的编程语言。
  • 这只会在页面加载时运行一次。该服务器是一个 aspx 服务器,因为我只有 php 的经验,所以我有点迷路了。我创建了一个新问题:stackoverflow.com/questions/14891178/…
猜你喜欢
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 2017-04-14
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多