2013-05-28 34 views
1

我試圖更新位於DIV(DIV1)聊天的內容,但更新內容只有當DIV1變化的內容(留言已提交到數據庫和DIV1回升)。jQuery的,必要時

我試圖解決從here但我GET操作失敗的數據進行比較。

此解決方案完美,但不包含內容的比較:

window.onload = startInterval; 
function startInterval() 
{ 
    setInterval("startTime();",2000); 
} 

function startTime() 
{ 
    jQuery('#div1').load('index.php #div1 > *'); 
} 

這是一個基於this修改,其將失敗:

window.onload = startInterval; 
function startInterval() 
{ 
    setInterval("startTime();",2000); 
} 

function startTime() 
{ 
    var $main = $('#div1'); 
    $.get('chat.php #div1', function (data) 
    { 
     if ($main.html() !== data) $main.html(data); 
    }); 
} 

我嘗試這個代碼的各種修改,但無濟於事。 .. 我不能重新加載整個頁面,我不想,如果沒有必要做,因爲它使聊天難以閱讀,如果你有滾動槽的消息。 這怎麼解決?

UPDATE

基於@ TJ的建議我修改了現在的作品完美的代碼:

window.onload = startInterval; 
function startInterval() 
{ 
    setInterval(startTime,3000); 
    scrolDown(); 
} 

function startTime() 
{ 
    var $main = $('#div1');  
    $.get('#div1', function (data) 
    { 
     elements = $(data); 
     thisHTML = elements.find("#div1").html(); 
     if ($main.html() !== thisHTML) {     
      $main.html(thisHTML); 
      scrolDown(); 
     }   
    });  
} 

的另一個問題是,得到所需的庫:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script> 

這顯然不是我以前使用的負載所要求的。

+0

邊注:請不要將字符串傳遞到'setTimeout'或'setInterval'。使用'setInterval(startTime,2000);'(傳遞函數引用),而不是'setInterval(「startTime();」,2000);'(傳遞一個字符串)。 –

+1

您的第一次(成功)嘗試從index.php中拉出,第二次從chat.php中拉出不成功,這些是正確的頁面嗎? – tymeJV

+0

這些頁面應該是相同的,這只是我在簡化代碼時犯的一個錯誤。 – Roman

回答

1

你想使用get,但你想要load的片段功能,所以你必須自己做這個工作。那麼記得你上一次獲得,如果它是不一樣的只更新:

var lastHTML; 

function startTime() 
{ 
    var $main = $('#div1'); 
    $.get('chat.php', function (data) // <== Or index.php, the question has both 
    { 
     var elements, html; 

     // Turn the HTML into elements 
     elements = $(data); 

     // Get the HTML of *only* the contents of #div1 
     html = elements.find("#div1").html(); 

     // If that has changed, use it 
     if (lastHTML !== thisHTML) { 
      lastHTML = thisHTML; 
      $main.html(thisHTML); 
     } 
    }); 
} 

請注意,這是一個非常基本實現片段功能(沒有,例如,剝離出的腳本的方式load一樣)。你可能想看看load如何做它的片段和複製(開源的喜悅)。

+0

謝謝你的時間,但問題可能還有其他地方,因爲我甚至不能從get內部運行alert('test')(在其之外運行)。我的整個代碼:http://pastebin.com/fjWHHiu7它是對joomla模塊的修改。該網站的完整路徑是www.example.com/index.php/sim-chat – Roman

+0

@Roman:從根本上說,如果'load'作品,'GET'會工作。我認爲一定要在你從'load'切換到get'的同時改變其他*變量。 –

+0

@「T.J。」你能看看整個代碼嗎? http://pastebin.com/fjWHHiu7經過幾個小時的努力之後,我真的沒有想法...... startTime()函數的第一部分(註釋中)是可以正常工作的 - 沒有內容檢查。 – Roman