Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery Ajax-在循环内不工作_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript jQuery Ajax-在循环内不工作

Javascript jQuery Ajax-在循环内不工作,javascript,jquery,ajax,Javascript,Jquery,Ajax,我两天来一直在努力解决这个问题。但事情似乎对我不起作用 我附带的代码在循环外部运行良好,但当我在循环内部使用它时,它根本无法按我希望的方式工作,并将空数组记录到控制台中 另一方面,在ajax请求中使用“async:false”可以使代码正常工作并在控制台中完全输出阵列,但正如您所知,使用“async:false”是不推荐的,它会完全冻结UI,直到请求未完成 除了将async设置为false之外,还有其他解决方案吗 for (var i = 0; i <= splittedURLSLengt

我两天来一直在努力解决这个问题。但事情似乎对我不起作用

我附带的代码在循环外部运行良好,但当我在循环内部使用它时,它根本无法按我希望的方式工作,并将空数组记录到控制台中

另一方面,在ajax请求中使用“async:false”可以使代码正常工作并在控制台中完全输出阵列,但正如您所知,使用“async:false”是不推荐的,它会完全冻结UI,直到请求未完成

除了将async设置为false之外,还有其他解决方案吗

for (var i = 0; i <= splittedURLSLength; i++) {
            var extracted = extractUsername(splittedURLS[i]);
            postData = {'name' : extracted};
            ajaxRequest = $.when( $.ajax({
            url: "/check",
            type: "POST",
            data: postData
            })).then(function(returnedResponse) {
                if (returnedResponse == "1") {
                    resultsArray.push(extracted);
                }   
            });
}
console.log(resultsArray);

for(var i=0;i您面临的问题是,您正在将
resultsArray
记录到console中,然后控制台才会被AJAX请求中的值填充。下面的代码将简要介绍如何使用响应中的数据-

for (var i = 0; i <= splittedURLSLength; i++) {
        var extracted = extractUsername(splittedURLS[i]);
        postData = {'name' : extracted};
        ajaxRequest = $.when( $.ajax({
                          url: "/check",
                          type: "POST",
                          data: postData
                      })).then(function(returnedResponse) {
                          if (returnedResponse == "1") {
                              resultsArray.push(extracted);
                              showResults(resultsArray);
                          }   
                      });
}

function showResults(resultsArray) {
    console.log(resultsArray);
    //Process your resultsArray as per requirement.
}

for(var i=0;i您面临的问题是,您正在将
resultsArray
记录到console中,然后控制台才会被AJAX请求中的值填充。下面的代码将简要介绍如何使用响应中的数据-

for (var i = 0; i <= splittedURLSLength; i++) {
        var extracted = extractUsername(splittedURLS[i]);
        postData = {'name' : extracted};
        ajaxRequest = $.when( $.ajax({
                          url: "/check",
                          type: "POST",
                          data: postData
                      })).then(function(returnedResponse) {
                          if (returnedResponse == "1") {
                              resultsArray.push(extracted);
                              showResults(resultsArray);
                          }   
                      });
}

function showResults(resultsArray) {
    console.log(resultsArray);
    //Process your resultsArray as per requirement.
}

for(var i=0;i因为AJAX请求是异步的,所以您的console.log将在第一个AJAX请求返回之前启动。这就是Javascript中事件循环的工作方式

您需要将逻辑移到成功处理程序中:

for (var i = 0; i <= splittedURLSLength; i++) {
        var extracted = extractUsername(splittedURLS[i]);
        postData = {'name' : extracted};
        ajaxRequest = $.when( $.ajax({
        url: "/check",
        type: "POST",
        data: postData
        })).then(function(returnedResponse) {
            if (returnedResponse == "1") {
                resultsArray.push(extracted);
            }
            if(i === splittedURLSLength){
               console.log(resultsArray);
            }
        });

for(var i=0;i因为AJAX请求是异步的,所以您的console.log将在第一个AJAX请求返回之前启动。这就是Javascript中事件循环的工作方式

您需要将逻辑移到成功处理程序中:

for (var i = 0; i <= splittedURLSLength; i++) {
        var extracted = extractUsername(splittedURLS[i]);
        postData = {'name' : extracted};
        ajaxRequest = $.when( $.ajax({
        url: "/check",
        type: "POST",
        data: postData
        })).then(function(returnedResponse) {
            if (returnedResponse == "1") {
                resultsArray.push(extracted);
            }
            if(i === splittedURLSLength){
               console.log(resultsArray);
            }
        });

for(var i=0;i只是解决它的另一个想法

var resultsArray[]//Global or should be pass to the function...

myIterate(0);

function myIterate(idx){
    var i = idx;
    if (i < splittedURLS.length){
        var extracted = extractUsername(splittedURLS[i]);
        postData = {'name' : extracted};
        ajaxRequest = $.when( $.ajax({
        url: "/check",
        type: "POST",
        data: postData
        })).then(function(returnedResponse) {
            if (returnedResponse == "1") {
                resultsArray.push(extracted);
                myiterate(i++);
            }   
        });
    }
}
console.log(resultsArray);
var resultsArray[]//全局or应该传递给函数。。。
myIterate(0);
函数myIterate(idx){
var i=idx;
if(i
这只是解决问题的另一个办法

var resultsArray[]//Global or should be pass to the function...

myIterate(0);

function myIterate(idx){
    var i = idx;
    if (i < splittedURLS.length){
        var extracted = extractUsername(splittedURLS[i]);
        postData = {'name' : extracted};
        ajaxRequest = $.when( $.ajax({
        url: "/check",
        type: "POST",
        data: postData
        })).then(function(returnedResponse) {
            if (returnedResponse == "1") {
                resultsArray.push(extracted);
                myiterate(i++);
            }   
        });
    }
}
console.log(resultsArray);
var resultsArray[]//全局or应该传递给函数。。。
myIterate(0);
函数myIterate(idx){
var i=idx;
if(i
ajax中的第一个“a”代表“异步”。您的数组可能正在填充(假设您没有收到任何服务器错误),但是
console.log()
调用将在HTTP请求完成之前很久发生。异步调用将在后台继续,而脚本将在不等待结果的情况下继续进行。(这是简化的,但对于您的问题来说应该是正确的)“ajax”中的第一个“a”代表“异步”。您的数组可能正在填充(假设您没有收到任何服务器错误),但是
console.log()
调用将在HTTP请求完成之前很久发生。异步调用将在后台继续,而您的脚本将在不等待结果的情况下继续进行。(这很简单,但对于您的问题应该是正确的)感谢您的响应。顺便说一句“resultsArray”因为returnedResponse可以是0或1,所以与splittedURLSLength相等的机会微乎其微。捕捉得好。编辑我的帖子以反映这一点。感谢您的回复。顺便说一句“resultsArray”因为returnedResponse可以是0或1,所以与splittedURLSLength相等的机会微乎其微。很好。编辑了我的帖子以反映这一点。所以我将循环体包装在一个函数中。答对了!非常感谢您的回复。顺便问一句,您能告诉我将体包装在函数中的逻辑是什么吗?为什么如果不将它包装到函数中,它就不能工作吗?事实上,我不仅仅是包装它…我递归地调用它…我喜欢“MPJ”的方式在此解释:。另外:它只允许ajax在进入数组中的下一个URL之前执行自身。因此,我将循环体包装在一个函数中。答对了!它工作得很好。非常感谢您的响应。顺便说一句,您能告诉我在函数中包装体的逻辑是什么吗?为什么没有wrappi它就不能工作在函数中调用它?事实上,我并没有把它包装起来……我递归地调用它……我喜欢“MPJ”在这里的解释:。另外:它只允许ajax在进入数组中的下一个URL之前执行自己。