完成当前请求后一次一个XHR请求

时间:2016-04-19 08:52:26

标签: javascript ajax xmlhttprequest

我正在开发一个程序,通过使用XHR Request将post方法的用户id发送到processId.php来检查用户ID是否存在。我首先在id数组中的for循环中尝试了XHR请求,但是它杀死了浏览器,因为它包含数千个元素,因为一次有数千个XHR请求。然后我在StackOverflow上发了一篇帖子,说我不应该在for循环中使用XHR请求,而应该在函数内调用函数,所以我写了下面的代码。该程序似乎有效但杀死了浏览器,因为仍有数千个请求。

我试图弄清楚如何在完成当前/进程内XHR请求后一次制作一个XHR请求。有帮助吗?我可以为此创建一个完整函数的任何解决方案。

PS:我不想使用jQuery。

<?php
$php_array_id = [element-1,element-2.........,element-n];
$js_array_id = json_encode($php_array);
echo "var userIds = ". $js_array_id . ";\n";
$url = "http://example.com/idProcess.php";
?>

<script>

function processNext(i) {
        if (i < userIds.length) {
        var http = new XMLHttpRequest();
        var url = "<?php echo $url ?>";
        var params = "id=" + userIds[i];
        http.open("POST", url, true);
        http.onreadystatechange = function() {
            if(this.readyState == 4 && this.status == 200) {
                if(this.responseText){
                        document.getElementById("reports").innerHTML += "<div>ID = " + this.responseText + " Exists</div>";
                }
            }
        }
        http.send(params);
        i++;
        processNext(i);

        }
    }

processNext(0);

</script>

2 个答案:

答案 0 :(得分:0)

试试这个

<script>
var userIds = <?php echo($js_array_id) ?>;

function processNext(i) {
        var http = new XMLHttpRequest();
        var url = "<?php echo($url) ?>";
        var params = "id=" + userIds[i];
        http.open("POST", url, true);
        http.onreadystatechange = function() {
                if(this.readyState == 4 && this.status == 200) {
                    if(this.responseText){
                            document.getElementById("reports").innerHTML += "<div>ID = " + this.responseText + " Exists</div>";
                            i++;
                            if(i<userIds.length){processNext(i);}
                    }
                }
            }
            http.send(params);
    }

processNext(0);

答案 1 :(得分:0)

欢迎来到asynchronous callback

的精彩世界

说,你怎么想通过xhr检查成千上万的用户id?