Javascript 在for循环之后重定向到不同的网页

Javascript 在for循环之后重定向到不同的网页,javascript,html,for-loop,callback,Javascript,Html,For Loop,Callback,我试图让一些javascript运行一个for循环,该循环将创建一个xml文件,然后在循环完成后,访问一个允许用户下载该文件的链接。目前的情况是,它在创建文件的过程中完成了一半,然后向用户发送下载文件的链接 我随后创建了一个回调变量,并将下载链接移动到另一个函数,但这也没有解决问题。还有人知道怎么做吗?我的代码是: var callbackcount=0; function populateTemplate(numResults) { for (i=1; i < numResults;

我试图让一些javascript运行一个
for
循环,该循环将创建一个xml文件,然后在循环完成后,访问一个允许用户下载该文件的链接。目前的情况是,它在创建文件的过程中完成了一半,然后向用户发送下载文件的链接

我随后创建了一个回调变量,并将下载链接移动到另一个函数,但这也没有解决问题。还有人知道怎么做吗?我的代码是:

var callbackcount=0;
function populateTemplate(numResults) {
  for (i=1; i < numResults; i++) {
    $.post('linkToTheFileThatCreatesTheXMLFile', {WithSomeParameters};
    download(numResults);
  }
}

function download(numResults) {
  callbackcount++;
  if (callbackcount == numResults) {
    window.location.href="linkToPHPThatDownloadsFile";
  }
}
如果numResults=7

等等

编辑: 新守则:

函数populateTemplate(numResults){
var callbackcount=1;
对于(i=1;i
$。post
是异步调用。因此,当您到达最后一个循环时,在闭包中,
callbackcount
将等于
numResults
所有帖子还没有通过。绝对不是最后一个

$.post
允许在post完成后调用回调。此回调应调用您的
下载方法

var callbackcount=0;
function populateTemplate(numResults) {
  for (i=1; i < numResults; i++) {
    $.post('linkToTheFileThatCreatesTheXMLFile', {WithSomeParameters}, function() {

      callbackcount++;
      if (callbackcount === numResults) {
        window.location.href="linkToPHPThatDownloadsFile";
      }

    });
  }
}

这会延迟每个请求,因此并非每个请求都在一个帧中进行

看起来您正在使用jQuery。您发布的代码不正确,应该是:

$.post( 'linkToTheFileThatCreatesTheXMLFile', {Parameters}, function() {
    download(numResults);
});
(除非你的代码格式弄乱了)


另外,请确保通过回调计数定义并初始化了
numResults
。(可能是范围问题)

谢谢您的回复我用回调函数修改了代码,但仍然不起作用:(我发出了
警报(callbackcount)
直接在
callbackcount++
下面,用
numResults=7运行它。然后它会弹出:1,2,3,4,5,然后停止,下一次它会是2,3,1,4等等。这仍然是因为它完成循环太快了吗?我再次查看它,我意识到你用计数器ov
I=1启动循环e> 。为了使
callbackcount
的numResults相等,您需要设置
i=0
,否则循环将少运行一次。请参阅我的编辑。如果仍然没有更改任何内容,请写入
console.log(callbackcount,numResults)
就在
if
语句之前。很抱歉,我将I设置为1,因为它引用的数组是从第二个位置而不是第一个位置开始的,我认为这不会影响循环的早期退出。我放入
控制台.log
并用30
numResults=7
进行了尝试。我已经用res编辑了我的问题ults.Ok,但是如果用一开始循环,那么必须将if子句更改为:
if(callbackcount===numResults-1)
,而我并不真正理解日志。它应该类似于日志0 7日志1 7日志2 7日志3 7日志4 7日志5 7日志6 7
LOG: 27 LOG: 37 LOG: 47 LOG: 57 
function populateTemplate(numResults) {
  var callbackcount = 1;
  for (i=1; i < numResults; i++) {
    $.post('linkToTheFileThatCreatesTheXMLFile', {WithSomeParameters}, function() {
      callbackcount++;
      console.log(callbackcount, numResults);
      if(callbackcount === numResults - 1) {
        window.location.href="linkToPHPThatDownloadsFile";
      }
    });
  }
}
var callbackcount=0;
function populateTemplate(numResults) {
  for (i=1; i < numResults; i++) {
    $.post('linkToTheFileThatCreatesTheXMLFile', {WithSomeParameters}, function() {

      callbackcount++;
      if (callbackcount === numResults) {
        window.location.href="linkToPHPThatDownloadsFile";
      }

    });
  }
}
var callbackcount=0;
function populateTemplate(numResults) {
  for (i=1; i < numResults; i++) {

    setTimeout( function() {

      $.post('linkToTheFileThatCreatesTheXMLFile', {WithSomeParameters}, function() {

        callbackcount++;
          if (callbackcount === numResults) {
            window.location.href="linkToPHPThatDownloadsFile";
          }

      });

    }, 100);
  }
}
$.post( 'linkToTheFileThatCreatesTheXMLFile', {Parameters}, function() {
    download(numResults);
});