我有这个功能
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,如果可以的话?
答案 0 :(得分:-1)
您必须传递ajax请求asynchronous:false
而不是true。否则,另一种方式是不可能的。
使用jQuery的其他方式
最简单的方法是使用.ajaxStop()事件处理程序:
$(document).ajaxStop(function(){ //在这里完成最后一次杰出的ajax调用时放置代码 });