在没有承诺的情况下多次调用同一个异步函数加载数据
Load data from same async function calling multiple times without promises
我有一个像下面这样的异步函数(从url获取数据并加载html元素)
function gethtml(URL, elementID) {
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
} else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }
xmlhttp.open("GET",URL,true);
xmlhttp.send();
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById(elementID).innerHTML = xmlhttp.responseText;
}
}
}
我需要多次调用上面的函数来加载数据到多个HTML元素。例:
gethtml(URL1, 'element1');
gethtml(URL2, 'element2');
gethtml(URL3, 'element3');
我试过了,但它只加载最后的URL3数据。我认为每次调用异步函数时都会覆盖数据。
如何加载数据从同一异步函数调用多次?
问题是您只有一个变量xmlhttp
,它被声明为全局变量。每次调用函数时,通过调用new XMLHttpRequest()
来覆盖它。它创建了一个新的对象,并指定了回调,但随后立即通过创建一个新对象来销毁该引用。
XMLHttpRequest
对象。function gethtml(URL, elementID){
// using the 'var' keyword makes these variables local in scope -
// only accessible from this function
if (window.XMLHttpRequest) {
var xmlhttp=new XMLHttpRequest();
} else {
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
// ...
}
使用var
关键字,它应该工作如预期的
相关文章:
- 在同一个javascript事件处理程序中调用不同的函数
- 当多个 JS 事件调用同一个函数时,如何处理它们
- Angular对同一个调用给出不同的结果
- 如何用两种不同的方式调用同一个函数
- 从同一个变量中调用函数
- 如何防止php中两个独立的ajax调用修改同一个数据库
- 从同一个文件和不同的文件调用nodejs函数
- 在同一个元素上调用c#然后调用js
- 在同一个按钮上调用多个函数对我来说不起作用(ajax)
- 为什么同一个存储过程调用被多次触发
- 你能从同一个UserControls Javascript调用一个UserControl服务器函数吗
- 使用ajax从同一个javascript函数多次调用,对象在函数体和ajax成功回调之间的参数不相同
- 如何在同一个脚本中从一个函数到另一个函数进行javascript调用
- 在新窗口中打开同一个AngularJS应用程序,在父窗口中调用函数
- Ajax一次又一次地调用同一个类
- 我的一个变量是在initMap中设置的,但是当我在脚本中调用另一个函数时,同一个变量突然没有定义
- 向同一个php文件发送AJAX调用
- 在两个地方调用同一个函数只适用于一个实例
- 在多个对象上下文中调用同一个函数
- angular-Js:不能在同一个控制器的不同函数调用中访问数组元素