2017-07-18 6 views
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 
} 
+1

"異なる方法"とは何ですか?なぜあなたは同じパラメータでリクエストをしますか? – guest271314

+0

ステートメントの最後に ';'を入れてください。 ASIによっては危険です。 – Barmar

+1

TaskIdChatを設定し、その後TaskIdChatを以前に設定したのと同じ値にTaskIdを再度設定することについては何ですか? – Unlockedluca

答えて

0

問題が見つかりました。問題はクライアント側ではありませんでした。私はデフォルトでシングルスレッドモードで動作するフラスコフレームワークを使用しています。したがって、クライアント側からの非同期要求には対応していませんでした。

関連する問題