我不是JS或jQuery的專家。我試着寫代碼的聊天應用程序,並像這樣:
- 獲取會話列表從一個AJAX調用
- 填充由API返回的談話網頁的左側窗格中
- 在左窗格填充所有對話後,將聊天列表項綁定到窗格的右側。
現在我遇到的問題是這個。從API調用獲取對話列表後,我遍歷列表並將每個項目綁定到窗格。 。每個函數在綁定函數執行完代碼塊之前進入下一次迭代。當具有$ .each迭代器的函數完成執行時,我使用「.done()」來填充第一個對話項目的聊天記錄,但由於循環在所有對話被正確綁定之前完成,所以聊天列表是在我看到任何對話之前就會出現,因此,我無法將任何事件綁定到對話中。
我試圖實現的是等待綁定對話完成執行,然後繼續迭代
我的代碼如下:
function (data) {
$.each(data, function (index, value) {
if (value.toUser == loggeduser) {
var isMe = false;
getUser(value.fromUserID, function (user) {
if (user.picturename == 'none') {
bindConversationItem(value.chatMessages[0].message, user.username, 'nopic.png', value.conversationID);
}
else {
bindConversationItem(value.chatMessages[0].message, user.username, user.picturename, value.conversationID);
}
});
}
else {
getUser(value.toUserID, function (user) {
var isMe = true;
if (user.picturename == 'none') {
bindConversationItem(value.chatMessages[0].message, user.username, 'nopic.png', value.conversationID);
}
else {
bindConversationItem(value.chatMessages[0].message, user.username, user.picturename, value.conversationID);
}
});
}
});
}).done(function (data) {
populateFirstConversation(data);
bindEvents();
});
這是我的bindConversationItem功能
function bindConversationItem(message, username, userimage, index) {
var conv_item = '<li> <a href="#" conversation-index = '+index+' class="clearfix">'
+ '<img src="http://localhost:1995/contents/member/' + userimage + '" alt="" class="img-circle">'
+ '<div class="friend-name">'
+ '<strong>' + username + '</strong>'
+ '</div>'
+ '<div class="last-message text-muted">' + message + '</div>'
+ '<small class="time text-muted">Just now</small>'
+ '<small class="chat-alert label label-danger">1</small>'
+ '</a>'
+ '</li>'
$("ul.friend-list").append(conv_item);
}
我試過包裝在函數內部的代碼,並使用一個回調函數,但我似乎無法得到它的工作。任何解決方案在這裏表示讚賞
編輯
我有功能「的getUser」這是異步的每個循環這裏是什麼樣子:
function getUser(userid, callback) {
$.ajax({
url: 'http://localhost:1995//api/member/' + userid
}).done(callback)
}
什麼功能是異步在你的$ .each,getUser()? –
@AhmedMujtaba getUser調用不返回任何值。 – guest271314
@ guest271314它應該返回什麼?回調函數從Ajax響應中返回數據。 –