2015-01-04 138 views
0

如何獲取checkViewers()函數?正常工作?我相信我在JS文檔文件中調用它是錯誤的,因此JS沒有正確讀取函數。基本呼叫功能故障排除

當前的代碼:

//Content Viewer Information 
function checkViewers() { 

    //Base Variables 
    var viewer = $('#viewed span.user'); 
    var totalViews = $('#viewed span.user').length; 
    var shortenViews = $('#viewed span.user').length -1; 

    if (totalViews === 0) { 
     $('<span> 0 people have </span>').insertBefore($('#viewed span:last-child')); 
    } 
    if (totalViews === 2) { 
     $('<span> and </span>').insertAfter(viewer.first()); 
    } 
    if (totalViews >= 3) { 
     viewer.slice(1).hide(); 
     $('<span> and </span>').insertAfter(viewer.first()); 
     $('<span class="user count"></span>').insertAfter(viewer.eq(2)); 
     $('.count').html(shortenViews + ' more people'); 
    } 

} 

的函數叫做朝向剩餘JS的底部,JSON數據之後被調用。

理想情況下,JSON數據應該輸入到HTML中,並且該函數應該能夠捕獲觀衆的數量。這應該影響觀看者在HTML中的顯示方式,以及列出的觀衆人數。

查看Plunker

+0

在上面的代碼中,你不顯示如何調用它。 – epascarello

+0

並查看該隨機站點上的代碼後。 Ajax是異步的。你從互聯網上下了一個比薩餅,你試圖在比薩到達你的房子之前吃。你必須等到披薩出現後再吃。也就是說,只有數據在那裏,你才能調用你的函數。所以當你設置html時,你可以調用你的函數。 – epascarello

+0

@epascarello我喜歡你可視化異步的新方式 – charlietfl

回答

4

使我的評論答案:

Ajax是異步。你從互聯網上下了一個比薩餅,你試圖在比薩到達你的房子之前吃。你必須等到披薩出現後再吃。也就是說,只有數據在那裏,你才能調用你的函數。所以,當你設置的HTML,你打電話你的功能

xhr.onload = function() { //<--Function is called when the Pizza shows up at your door and the doorbell rings 
    ... //removed a bunch of code.... 
    //Update Page With New Content 
     var viewerSection = $('#viewed'); 
     viewerSection.html(newViewers); //You open up the pizza box 
     checkViewers(); //<--- MOVE IT HERE, The pizza is here!!!!  
    } 
}; 

xhr.open('GET', 'data.json', true); //<-- You set up your pizza order 
xhr.send(null); //<--You make the pizza purchase 

//checkViewers(); <-- PIZZA IS NOT HERE!!!! 
+0

我打開了plunkr ...測試了這個! Works ... – rfornal

+0

@epascarello您的比喻對於可視化Ajax非常有幫助。如果我發佈示例,我通常使用JSFiddle。我使用Plunker的原因純粹是因爲我想在外部和內部鏈接JSON。感謝您的幫助! – Andrew