在for循环

时间:2016-07-29 10:58:06

标签: javascript ajax asynchronous prototypejs

我有这个功能

function add_cnh(arr_clelem){

  var id=arr_clelem.getElementsByClassName("present")[0].id;
  var date=arr_clelem.getElementsByClassName("present")[0].getAttribute('date');
  var tt_entry= arr_clelem.getElementsByClassName("present")[0].getAttribute('tt_entry'); 


//new Ajax.Updater('register', '/some_url', { method: 'get' });

new Ajax.Request('/attendances/new',
{
    parameters:'id='+id+'&date='+date+'&timetable_entry='+tt_entry+'&subject_id='+subject_id,
    asynchronous:true,
    evalScripts:true,
    method:'get'
 /*onSuccess: function(transport) {
var response = transport.responseText || "no response text";
alert("Success! \n\n" + response);
}*/

}
)
var ret=modal_data;
  // $$('.MB_close').invoke('observe', 'click', _deinit);
return ret;

}

这个函数将html-elements-object作为一个参数,基本上渲染一个模态框,该模态框包含一个form -elements,我需要存储在一个数组中。变量modal_data包含我需要的元素以及在另一个文件中定义的全局变量。

我的问题是 这是一个非常古老的项目,使用了许多JavaScript框架和库,可以追溯到2006年,不推荐使用负责打开模型框本身的库here

不知怎的,我不想进入服务器端,所以我使用像这样的for循环

for(var i=0; i<arr_of_elements.length, i++)
{
   my_arrvar[i]=add_cnh(arr_of_elements[i]);
}

现在进行每次迭代,因为我希望模式框关闭并将数据存储在'my_arrvar'中,这在某种程度上是不可能的,因为调用本质上是异步的,我使用了闭包和回调但没有成功。我不想使用任何类型的计时器。所以这就是它的方式

调用该函数并获取每个调用的数据,并按id删除模式框。

也可以以某种方式使用this,如果可以的话?

1 个答案:

答案 0 :(得分:-1)

您必须传递ajax请求asynchronous:false而不是true。否则,另一种方式是不可能的。

使用jQuery的其他方式

最简单的方法是使用.ajaxStop()事件处理程序:

$(document).ajaxStop(function(){   //在这里完成最后一次杰出的ajax调用时放置代码 });

请参阅jQuery Event handler