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