我正在尝试为一系列的每一个做一个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。
答案 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()文档。