2010-02-10 32 views
1

我有一个jQuery AJAX功能轮询数据库服务器,以查看是否有新的记录,以识别插入的DOM元素。如果是这样,它使用以下插入在记录列表的顶部新记录(含唯一ID):如何获得IE6通过jQuery insertAfter()

$(new_records).insertAfter('#div_at_top_of_page'); 

这工作得很好,即使是在IE6。

但是,每个插入的记录都有一个辅助ajax函数来获取有关该记录的更多详细信息,并将其插入插入元素中的元素。

这工作正常在每个浏览器除了 IE6。 IE6执行辅助ajax函数(我已经证实了这一点),但不插入内容。它静静地失败,没有抛出任何错误。

我假设这是因为IE6不看DOM中插入的元素;但无论如何,我会很感激任何关于如何解决这个问题的想法。

编辑2 - 我在下面的第一次编辑中添加的代码似乎工作正常。问题是IE6不知道$('#inserted_data_' + log_id)存在。这是使用上面的.insertAfter()方法插入的元素。

编辑 - 用于插入辅助数据的代码:

$('.printout').live('click', function(ev) { 
    ev.preventDefault(); 
    var ajaxUrl = $(this).attr('href'); 
    $.ajax({ 
     url: ajaxUrl, 
     cache: true, 
     dataType: 'json', 
     success: function(j, textStatus) { 
      var printout = j.printout; 
      alert(printout); // sanity check 
      var log_id = ajaxUrl.replace('/api/fetch_data/printout/', ''); 
      $('#inserted_data_' + log_id).html(printout); // problematic line 
     } 
    }); 
    return false; 
}); 

正如我所指出的,这个功能执行正常,由// sanity check证实,但行注意到上面注释// problematic line不实际上将数据写入'#inserted_data_' + log_id元素。

+0

提供一些代码来说明如何和何时第二Ajax调用发生,所以我们可以评论... – 2010-02-10 13:54:14

回答

1

我敢打赌,问题是你log_id变量。我猜你的replace没有按预期行事。把一对夫妇更多的完整性检查在那里,让我知道,如果他们指出你在正确的方向...

var log_id = ajaxUrl.replace('/api/fetch_data/printout/', ''); 
alert(log_id); // Show the log_id variable 

var el = $('#inserted_data_' + log_id); 
alert("Element found: " + (el.length > 0)); // Did it find the element? 

el.html(printout); // problematic line 
+1

*额头掴*这正是它IE6包含完整的URL(包括'HTP://! domain.com /')在ajaxUrl - 但只*在通过以前的ajax函数插入的元素的URL。我确信它与IE6的DOM有关,我不认为这确认。谢谢你的帮帮我! – user113249 2010-02-10 15:06:06

0

出于某种原因,当jQuery ajax()调用无法评估JSON(我曾多次遇到此行为)并且未执行回调函数时,它会以静默方式失败。确保IE6可以解析服务器返回的JSON字符串。

更新要进行测试,尝试在该行3724中插入这些警报(jQuery的1.3.2)

if (type == "json") { 
    alert('a'); 
    data = window["eval"]("(" + data + ")"); 
    alert('b'); 
} 

如果我的假设是正确的,你会看到“A”警报,但不是“ b'一个。

+0

谢谢对于答复,但我很肯定不是这样。它只在IE6上失败,并且仅在先前插入的元素上的ajax调用上失败。另外,'//完整性检查'警报确实有效。 – user113249 2010-02-10 14:23:42

+0

读完这个问题。他在那里有一个健康检查。 – 2010-02-10 14:50:33

0

不应

$('#inserted_data_' + log_id).html('printout'); // problematic line 

$('#inserted_data_' + log_id).html(printout); // problematic line 

+0

是的,对不起 - 固定。错字只在我粘贴到我的问题中的功能中,而不是在原文中。 – user113249 2010-02-10 14:26:28

1

多久是你的结果集,因为IE在大数据量扼流圈..
reference

另外,还要确保您的JSON数据没有变量名是相同的HTML页面中的ID ..
reference

+0

感谢您的回复。数据集非常小,<400个字符。无论如何,我知道json调用成功了。问题是IE6不认为'$('#inserted_data_'+ log_id)'存在。 :( – user113249 2010-02-10 14:45:31

+0

尝试提醒'$('#inserted_data_'+ log_id).length'以查看它是否找到任何东西.. – 2010-02-10 15:06:08

0

夫妇的建议,因为我真的不能复制他们的情况只是猜测,但我想尝试换行$('#inserted_data_' + log_id).html(printout);$(document).ready(function() { $('#inserted_data_' + log_id).html(printout); });。我在想,也许DOM是一个未准备就绪的状态,直到IE6完成添加前一个元素。

如果不是,我会尝试在该行上使用超时setTimeout(function() { $('#inserted_data_' + log_id).html(printout); },10);我知道这有点难看,但是如果它有效,您可以添加一个if来仅对IE6执行此操作。

此外,而不是alert(printout); // sanity check检查alert(document.getElementById(inserted_data_'+log_id));,以确保该元素已在那里与正确的ID(也许IE6没有插入具有正确属性的元素,看到名称属性问题相当多的时间)

+0

>此外,而不是'警报(打印输出);//健全检查'检查'警报(文档。的getElementById(inserted_data _'+ LOG_ID));' 这就是问题所在:IE6只是没有看到插入的元素 – user113249 2010-02-10 14:43:31