2012-02-14 59 views
1

我發現這個很棒的例子來實現像「x new tweets」這樣的推文http://blog.hycus.com/2011/03/14/realtime-updates-like-twitter-using-phpmysqljquery/
在這個例子中,使用了.arte jQuery插件。不過,我認爲它可以只是做一樣與阿賈克斯,我已經編碼爲:
推特如.arte或.ajax的「x new tweets」?

$.ajax({ 
        url:'async.php?  main='+$('.boxOfMainPage:first').attr('id'), 
        success:function(results) 
        { 
         if(results!='') 
         { 
           if(results.indexOf('boxOfMainPage')>=0) 
           $('#tweetEveryone').prepend(results); 
          else 
           $('#newTweet').html("<center><a href=''>I found "+results+" new tweets</a></center>").show(); 
         } 
        } 
       }); 

這個檢查結果,並且將結果以tweetEveryone。 Async.php只是做一個mysql_query並且帶來新的結果。實際上,我已經對該示例做了完全相同的處理,但是當我點擊「新推文」時,它有時會導致回發。在這個例子中,我沒有經歷過它。是否因爲.arte.ajax之間的差異?

+0

[ARTE jQuery插件:阿賈克斯實時擴展(http://code.google.com/p/arte/) – 2012-02-14 15:15:41

回答

1

這是一無所知ARTE阿賈克斯之間的區別(實際上並在很短的方式,ARTEAJAX被調用的間隔,試圖做類似「long polling」)

所以,你有一個沒有href值的鏈接,這必須「重新加載」你的頁面,即它將執行一個GET請求到window.location中的實際URL。回發執行POST請求,這真的發生了嗎?

---編輯---

如果你想這樣做從Twitter同樣的效果,這很簡單。在async.php,而不是你所寫的,顯示有多少鳴叫的鏈接元素在舊狀態之後,使這個頁面用所有推文寫一個JSON對象,然後,你的ajax函數必須得到這個JSON並將它轉換成一個JS對象。有了這個對象,你將能夠計算你需要顯示多少更新,以及它們究竟是哪一個。

所以,烏爾功能可能是這樣的(假設 「#boxOfMainPage」 是烏拉圭回合的鳴叫容器):

$.ajax({ 
    url  : 'async.php?main='+$('.boxOfMainPage:first').attr('id'), 
    success : function (tweets) { 
    window.NEW_TWEETS = tweets; 
    if (NEW_TWEETS && NEW_TWEETS.length) { 
     $('#newTweet').html("<center><a href='#' onclick='showNewTweets()'>I found "+NEW_TWEETS.length+" new tweets</a></center>").show(); 
    } 
    } 
}); 

showNewTweets功能將是:

function showNewTweets() { 
    if (window.NEW_TWEETS && NEW_TWEETS.length) { 
    $('#newTweet').hide().html(""); 
    for (tweet in NEW_TWEETS) { 
     $("#boxOfMainPage").prepend(buildTweetHTML(tweet)); 
    } 
    } 
} 

而且buildTweetHTML

function buildTweetHTML(tweet) { 
    var $tweetElm = $("<div class='tweet'>"); 
    $tweetElm.append("<h2>"+tweet.user+" said:</h2>"); 
    $tweetElm.append("<p>"+tweet.content+"</p>"); 
    $tweetElm.append("<p class='time'>"+tweet.time+"</p>"); 
    return $tweetElm; 
} 

最後,async.php應該寫JSON對象是這樣的:

[ 
    { user : 'Rafael', content : 'The content from tweet', time : 'X time ago' }, 
    { user : 'George', content : 'The content from tweet', time : 'Y time ago' } 
    { user : 'Jack', content : 'The content from tweet', time : 'H time ago' } 
] 
+0

頁當我點擊鏈接時重新加載。有時它是顯而易見的,但我想給Twitter的效果,當鏈接被點擊時,它會加載新的推文異步。 – Ali 2012-02-14 19:25:51

+0

你現在對於答案的評價如何? – 2012-02-27 14:33:48

+0

非常感謝您的幫助,我會嘗試一下。 – Ali 2012-02-28 19:35:27