Javascript 循环中的同步AJAX请求得到相同的响应
我有一个JavaScript函数,它在一组设备上循环,对该设备进行API调用,并以JSON格式返回结果。但是,返回并打印到屏幕上的结果对于所有设备都是相同的(即使它们不应该是相同的) 我已经验证了API调用正在命中服务器端的每个不同的设备,但是,响应显示它们都来自同一个设备 从我所读到的一切来看,这与示波器有关,但我一辈子都不能让它起作用,有什么想法吗 JavaScript AJAX函数:(已更新) 控制台响应: 预期答复:Javascript 循环中的同步AJAX请求得到相同的响应,javascript,ajax,scope,Javascript,Ajax,Scope,我有一个JavaScript函数,它在一组设备上循环,对该设备进行API调用,并以JSON格式返回结果。但是,返回并打印到屏幕上的结果对于所有设备都是相同的(即使它们不应该是相同的) 我已经验证了API调用正在命中服务器端的每个不同的设备,但是,响应显示它们都来自同一个设备 从我所读到的一切来看,这与示波器有关,但我一辈子都不能让它起作用,有什么想法吗 JavaScript AJAX函数:(已更新) 控制台响应: 预期答复: 假设$,您的请求是异步的。get引用。您能给我们您的设备对象数组吗?不
假设
$,您的请求是异步的。get
引用。您能给我们您的设备对象数组吗?不清楚这将如何产生相同的返回结果。这是$.get
jQuery还是某种自定义方法?你真的应该声明i
,这样它就不是globalI了。我会看看控制台,看看网络选项卡中的请求,看看发生了什么。我猜服务器正在返回相同的数据。清除缓存并确保它不是您过去对服务器发出的错误请求中的一些旧数据。您应该能够在“开发工具网络”选项卡中看到Ajax响应,它们是否完全相同?我还注意到,您将一些东西包装在(我认为不必要的)IIFE中,或许可以去掉这些东西。您的请求是异步的,假设$。get
引用。您能否给我们您的设备对象数组…不清楚这将如何产生相同的结果。这是$.get
jQuery还是某种自定义方法?你真的应该声明i
,这样它就不是globalI了。我会看看控制台,看看网络选项卡中的请求,看看发生了什么。我猜服务器正在返回相同的数据。清除缓存并确保它不是您过去对服务器发出的错误请求中的一些旧数据。您应该能够在“开发工具网络”选项卡中看到Ajax响应,它们是否完全相同?我还注意到你用(我认为不必要的)iife包装了一些东西,也许可以把它们扔掉。
function getEthernetSwitchingTable(devices, macAddr) {
for (i=0;i<devices.length;i++) {
(function(idx){
var hostname = devices[idx]['hostname']
var deviceId = devices[idx]['id']
var URL = '/api/v1/device/'+hostname+'/ethernet-switching-table.json?macAddr='+macAddr
var ajax = $.get(URL, function(res){
console.log(hostname)
console.log(res)
}, "json")
})(i);
}
}
"GET /api/v1/device/cr01.corp.ldn01/ethernet-switching-table.json?macAddr=00:07:4d:55:d5:da HTTP/1.1" 200 317
"GET /api/v1/device/cr02.corp.ldn01/ethernet-switching-table.json?macAddr=00:07:4d:55:d5:da HTTP/1.1" 200 317
"GET /api/v1/device/cr02.plant.ldn01/ethernet-switching-table.json?macAddr=00:07:4d:55:d5:da HTTP/1.1" 200 317
"GET /api/v1/device/cr01.plant.ldn01/ethernet-switching-table.json?macAddr=00:07:4d:55:d5:da HTTP/1.1" 200 317
cr01.corp.ldn01
{DeviceHostname: "cr02.plant.ldn01", DeviceId: 104, EthernetSwitchingTable: {…}, Status: 200}
cr02.corp.ldn01
{DeviceHostname: "cr02.plant.ldn01", DeviceId: 104, EthernetSwitchingTable: {…}, Status: 200}
cr02.plant.ldn01
{DeviceHostname: "cr02.plant.ldn01", DeviceId: 104, EthernetSwitchingTable: {…}, Status: 200}
cr01.plant.ldn01
{DeviceHostname: "cr02.plant.ldn01", DeviceId: 104, EthernetSwitchingTable: {…}, Status: 200}
cr01.corp.ldn01
{DeviceHostname: "cr01.corp.ldn01", DeviceId: 57, EthernetSwitchingTable: null, Status: 200}
cr02.corp.ldn01
{DeviceHostname: "cr02.corp.ldn01", DeviceId: 100, EthernetSwitchingTable: null, Status: 200}
cr02.plant.ldn01
{DeviceHostname:"cr02.plant.ldn01", DeviceId:104, EthernetSwitchingTable:{"l2ng-l2-mac-vlan-name":[{"data":"pack11-15-304"}]}, Status:200}
cr01.plant.ldn01
{DeviceHostname: "cr01.plant.ldn01", DeviceId: 59, EthernetSwitchingTable: null, Status: 200}