2017-04-16 11 views
1

我有一個頁面可以加載多個保存的Instagram提要中的帖子。飼料的物體看起來像這樣:帶鏈接AJAX調用的條件邏輯

{'feed_type' : 'search', 'feed_term' : '#cars'} 
{'feed_type' : 'profile', 'feed_term' : 'FerrariOfficial'} 

如果飼料涉及的Instagram的個人資料,而不是哈希標籤,我們需要先查詢該用戶名的ID的Instagram的API(如Instagram的不允許通過用戶名查詢)。

還有一個頁面上的表單添加一個新的飼料,我想重新使用這些檢查和顯示方法,一旦飼料添加。

我有以下功能:

getInstagramIdFromUsername() 
displayPosts() 
addNewFeed() 

理想的情況下,這將是主要邏輯:

onLoad() { 
    // for each feed... 
    if (f.feed_type == "profile") { 
     getInstagramIdFromUsername(f); 
    } 
    displayPosts(f); 
} 

onAddFeedFormSubmitted(f) { 
    if (f.feed_type == "profile") { 
     getInstagramIdFromUsername(f); 
    } 
    addNewFeed(f); 
    displayPosts(f); 
} 

但是我有麻煩構建我的邏輯,所有這些功能都是異步的AJAX調用。什麼是最好的方法來做到這一點?我應該在這裏使用jQuery的Deferred Object嗎?

+0

你能否提供JSON格式的數據? =>是js中的一個箭頭函數...另外onLoad()必須在類中,或者它是一個語法錯誤(缺少*函數*) –

+0

另外你不需要延遲對象,你可以簡單地鏈接ajax使用承諾等來調用。 –

+0

謝謝 - 只是改爲JSON格式。 – Seano

回答

0

如果一個函數是異步的,你應該添加一個回調函數;

getInstagramIdFromUsername(callback) 

回調得到後得到飼料執行,這樣你就可以去像這樣:

onLoad() { 
    if (feed_type == "profile") { 
     getInstagramIdFromUsername(function() {displayPosts();}); 
    } else { 
     displayPosts(); 
    } 
} 
0

您可以簡單地返回一個由$就函數返回的對象。它是一種遞延對象:

onLoad() { 
// for each feed... 
if (f.feed_type == "profile") { 
    getInstagramIdFromUsername(f).done(function(data){ 
     displayPosts(f); 
    }); 
}else{ 
    displayPosts(f); 
} 

} 

onAddFeedFormSubmitted(f) { 
if (f.feed_type == "profile") { 
    getInstagramIdFromUsername(f).done(function(data){ 
    addNewFeed(f); 
    displayPosts(f); 
}); 
}else{ 

} 
} 

所以你getInstagramFromUsername功能看起來就像這樣:

function getInstagramIdFromUsername(){ 
    return $.ajax({ 
     url:"api/" 
    }); 
} 

您可以實現自定義的數據類型更高級的行爲。看看http://api.jquery.com/jquery.ajax/

+0

如果我建議使用.done(),那麼現有的已完成,失敗和總是定義的方法會發生什麼? – Seano

+0

@Seano *現有完成,失敗和總是方法*不存在於我,因爲你不提供他們在你的代碼... –