0
次のコードは、http long pollのフロントエンドコードです。これで、コードsetTimeout(getChat、0)がメソッドを非同期に呼び出すことを期待しています。しかし、getChatメソッドのXHRがすべて保留中の場合、異なるメソッドのXHRも保留状態になります。バニラのjavascriptで非同期呼び出しが機能しない
discussTask = function(taskId) {
taskIdChat = taskId
getChat() // initial call
}
var getChat = function() {
taskId = taskIdChat
payLoad = {
'task_id': taskIdChat,
'recent_message_id': recentMessageId
}
var xmlhttp = XHR('/chat/sync', 'POST', payLoad)
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState === 4) {
buildChat(JSON.parse(xmlhttp.responseText))
setTimeout(getChat, 0) // Async recursive call
}
}
}
var XHR = function(action, method, payLoad) {
var xmlhttp = new XMLHttpRequest()
xmlhttp.open(method, action, true)
xmlhttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8')
xmlhttp.send(JSON.stringify(payLoad))
return xmlhttp
}
"異なる方法"とは何ですか?なぜあなたは同じパラメータでリクエストをしますか? – guest271314
ステートメントの最後に ';'を入れてください。 ASIによっては危険です。 – Barmar
TaskIdChatを設定し、その後TaskIdChatを以前に設定したのと同じ値にTaskIdを再度設定することについては何ですか? – Unlockedluca