【发布时间】:2017-11-09 17:25:03
【问题描述】:
全部,
我有一些使用多个变量、对象和数组的代码。 不知何故,我被填充的对象现在是空的。
var items = [];
var countryCode = "";
var message = "";
var dataset = {};
var countryData = {};
countryData.fillKey = 'NEW';
function getItems(url) {
$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + url,
type: "GET",
headers: {
"accept": "application/json;odata=verbose",
},
success: function (data) {
var items = data.d.results;
for(var i = 0; i < items.length;i++) {
countryCode = items[i].Country0.Column2;
message = countryData.fillKey;
dataset[countryCode] = message;
}
},
error: function (error) {
alert(JSON.stringify(error));
}
});
}
当我在这段代码之后测试数据集时,它是空的。它应该是这样的:
dataset['UKR'] = countryData;
dataset['USA'] = countryData;
dataset['RUS'] = countryData;
为什么这不起作用?
马可
我的下一个代码必须使用数据集:
var map = new Datamap({
element: document.getElementById('container'),
geographyConfig: {
hideAntarctica: true,
highlightFillColor: false,
popupOnHover: true,
highlightOnHover: false,
borderColor: '#000000',
borderWidth: 0.5
},
fills: {
'NEW': '#FF0000',
'OLD': '#FF7F7F',
defaultFill: '#FFFED9'
},
data: dataset
});
map.svg.call(d3.behavior.zoom().on("zoom", redraw));
function redraw() {
map.svg.selectAll("g").attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
}
});
【问题讨论】:
-
您正在发出 Web 请求,因此在您测试数据集时请求可能尚未完成。
-
这段代码中发生了什么导致它“不起作用”?什么错误?
-
ajax 调用是异步的,javascript 在调用完成之前继续执行。如果您在 ajax 调用后立即检查数据集对象的值,它将为空,因为
success尚未触发。如果您需要对数据集执行某些操作,只需在success中创建后将其作为参数传递即可@ -
IrkenInvader,如何将其作为参数传递?
-
我的下一个代码必须使用数据集:
标签: javascript ajax object