2010-02-10 30 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