Javascript 如何按顺序调用一组包含ajax的函数?
我正在开发一个窗口,它有一组元素,每个元素都可以同时单独编辑。我使用ajax来实现编辑布局,然后再次使用ajax将其更改为如何向客户显示。问题是,我希望在用户单击窗口范围的保存按钮时保存每个“open for editing”元素 现在,有人认为在图像周围使用锚定标记而不是在图像上单击函数会很有趣,所以我必须使用Javascript 如何按顺序调用一组包含ajax的函数?,javascript,ajax,Javascript,Ajax,我正在开发一个窗口,它有一组元素,每个元素都可以同时单独编辑。我使用ajax来实现编辑布局,然后再次使用ajax将其更改为如何向客户显示。问题是,我希望在用户单击窗口范围的保存按钮时保存每个“open for editing”元素 现在,有人认为在图像周围使用锚定标记而不是在图像上单击函数会很有趣,所以我必须使用eval来调用函数 这是我用于窗口范围保存按钮的代码 var as = document.getElementsByClassName('link_salvare'); alert(as
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');
var as=document.getElementsByClassName('link_salvare');
警报(如长度);
对于(变量i=0;i
警报只是用来查看哪里出了问题,结果是for结构在第一次迭代(i=0)后停止。我得到as.length为2(当我有2个“编辑”元素时),但我只得到I=0,然后“完成”
我尝试了异步和非异步ajax调用,使用异步调用我得到了上述结果,而使用同步调用我只得到了警报,没有保存任何元素
我可以安排一次只编辑一个元素,但必须等到周末之后才能获得更改单个保存功能的许可
虽然这个问题还没有解决,但我还是通过
a) 将
更改为
,以避免使用eval
b) 更改窗口的设计,以便在任何时候只能编辑一个元素
我仍然不知道为什么“for”循环只经过了一次交互,但我现在没有时间去调查,我能做的最好的事情就是希望它以后不会咬我的屁股 触摸eval()
。。。。话虽如此,我看不出还有其他问题。。您谈到ajax(XmlHttpRequest),但没有提供与之相关的错误或代码
HTML
我强烈建议您修改HTML源代码,而不是像这样破解一个解决方案 触摸eval()
。。。。话虽如此,我看不出还有其他问题。。您谈到ajax(XmlHttpRequest),但没有提供与之相关的错误或代码
HTML
我强烈建议您修改HTML源代码,而不是像这样破解一个解决方案 为什么“必须使用eval()”?您永远不必使用eval(),那么我如何调用这些函数呢?请记住,它们被分配为
尝试了所有方式的触发器,但无法让它们实际运行这些函数。不完美,但有办法解决。我建议您更改HTML!:PI将在我获得处理这些文件的许可后立即更改html。为什么“必须使用eval()”?您永远不必使用eval(),那么我如何调用这些函数呢?请记住,它们被分配为
尝试了所有方式的触发器,但无法让它们实际运行这些函数。不完美,但有办法解决。我建议您更改HTML!:PI将在我获得许可后立即更改html,以处理这些文件。我必须问一下使用eval有什么问题?关于XmlHttpRequests:我将不得不等到周一发布它们,我怀疑可能是XmlHttpRequest对象的声明或其他什么。我不明白的是为什么循环只经过一次迭代。请记住…谢谢,现在我有权更改html了。我也会这样做,这样我就不需要通过在窗口上打开最多一个元素进行编辑来循环遍历所有元素。酷。如果这个问题不再相关,你可以删除或关闭它,或者接受我的回答:干杯。我必须问一下使用eval有什么问题?关于XmlHttpRequests:我将不得不等到周一发布它们,我怀疑可能是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();
});