如何按顺序调用一堆包含 ajax 的函数

How can I call a bunch of functions that contain ajax sequentially?

本文关键字:包含 一堆 ajax 函数 何按 顺序调用      更新时间:2023-09-26

我正在开发一个窗口,该窗口包含一堆元素,每个元素都可以单独同时编辑。我使用 ajax 来引入编辑布局,然后再次使用 ajax 将其更改回向客户显示的方式。问题是,我希望当用户单击窗口范围的保存按钮时保存每个"打开以供编辑"元素。

现在,有人决定在图像周围使用锚标签而不是在图像上使用onclick函数会很有趣,所以我必须使用eval来调用这些函数。

这是我用于窗口范围的"保存"按钮的代码。

var as = document.getElementsByClassName('link_salvare');
alert(as.length);
for(var i = 0; i < as.length; i++) {
    alert(i);
    eval(as[i].href);
}
alert('finished');

警报只是为了查看哪里出了问题,结果 for 结构在第一次迭代 (i=0) 后停止。我得到 as.length 为 2(当我有 2 个"编辑"元素时),但随后我只得到 i=0 然后"完成"。

我尝试使用异步和非异步 ajax 调用并使用异步调用,我在使用同步调用时得到上述结果,我只是收到警报,没有保存任何元素。

我可以安排一次只编辑一个元素,但这必须等到周末之后才能获得更改单个保存功能的许可。

虽然这个特殊问题尚未解决,但我通过以下方式解决它

a) 从<a href="javascript:function"><img>更改为<img onclick="function">,以避免使用EVAL;

b) 更改窗口的设计,以便任何时候只能编辑一个元素。

仍然不知道为什么"for"循环只经历了一次插入,但我现在没有时间调查,我能做的最好的事情就是希望它以后不会咬我的屁股;

触及eval()....话虽如此,我没有看到任何其他问题..你谈论ajax(XmlHttpRequest),但你没有提供任何与之相关的错误或代码。

.HTML

<a href="javascript:foo()" class="foobar">yoyo</a>
<a href="javascript:bar()" class="foobar">yoyo</a>​

爪哇语

var elements = document.getElementsByClassName('foobar');
function foo() {
    alert('foo');
}
function bar() {
    alert('bar');
}
[].forEach.call(elements, function(element) {
    var func = element.href.split(':')[1],
        func_name = func.substring(0, func.lastIndexOf('('));
    window[func_name].call();
});​

我强烈建议您更改HTML源代码,而不是破解这样的解决方案。 http://jsfiddle.net/rlemon/4vgPn/2/