多个xmlhttp请求-覆盖JSON get's
Multiple xmlhttp requests - JSON get's overwritten
我必须做多个xmlhttp请求(每个国家一个)。问题是我的JSON总是被覆盖到最后一个请求的结果。我有什么办法可以补救吗?代码如下:
function getDataBetween()
{
for (var i = 0; i < CountryNames.length; i++)
{
var countryName = CountryNames[i];
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
for (var a = 0; a < CountryNames.length; a++)
{
dataset[a] = JSON.parse(xmlhttp.responseText);
console.log(dataset[a]);
}
}
}
xmlhttp.open("GET","update.php?country=" + countryName + "&begin=" + beginTime + "&end=" + endTime + "&functionName=getActiveUsers", true);
xmlhttp.send();
}
DrawStructure();
}
我一直在寻找承诺语法,但我不确定如何在这种情况下使用它,我尝试过很多事情,但我不能让它工作。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
您需要为每个请求跟踪单独的xmlHttpRequest
对象。现在,您的for
循环使用相同的变量来存储所有变量,因此后面的变量覆盖后面的变量。有很多方法可以解决这个问题。一种方法是添加闭包,这样每次调用for
循环都有自己的函数作用域:
function getDataBetween()
{
for (var i = 0; i < CountryNames.length; i++)
{
(function() {
var countryName = CountryNames[i];
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
for (var a = 0; a < CountryNames.length; a++)
{
dataset[a] = JSON.parse(xmlhttp.responseText);
console.log(dataset[a]);
}
}
}
xmlhttp.open("GET","update.php?country=" + countryName + "&begin=" + beginTime + "&end=" + endTime + "&functionName=getActiveUsers", true);
xmlhttp.send();
})();
}
DrawStructure();
}
您也可以将对xmlhttp
的引用更改为对this
的引用,这样您就不会在覆盖onreadystatechange
处理程序后直接使用xmlhttp
变量:
function getDataBetween()
{
for (var i = 0; i < CountryNames.length; i++)
{
var countryName = CountryNames[i];
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (this.readyState==4 && this.status==200)
{
for (var a = 0; a < CountryNames.length; a++)
{
dataset[a] = JSON.parse(this.responseText);
console.log(dataset[a]);
}
}
}
xmlhttp.open("GET","update.php?country=" + countryName + "&begin=" + beginTime + "&end=" + endTime + "&functionName=getActiveUsers", true);
xmlhttp.send();
}
DrawStructure();
}
相关文章:
- 使用Javascript/JQuery获取JSON GET数据
- Get JSON from an url
- Ajax Javascript Get JSON value
- ajax get-json函数没有'不起作用
- $.get-json数组复制
- 如何将 http.get(//json from server) 中的 JSON 数据分配给 Javascript 变量
- 获取 get JSON 显示数组中的值时遇到问题
- 从$http.get JSON调用中删除关键字
- How can I get json content in <script src="url.json&
- jQuery-get-json每个都是堆叠字符串,而不是附加字符串
- TypeError:无法读取属性'值'$http.get JSON文件时未定义的
- AJAX jQuery PHP Get JSON
- 获取api - get json主体在then和catch块为单独的状态码
- 访问angular控制器中的HTTP GET JSON属性
- get JSON - JQuery & PHP
- AngularJS http get json
- GET JSON with XMLHttpRequest
- AngularJS HTTP Get JSON won't display
- d3.js get JSON from url
- JQuery Mobile get JSON from url