如何传递内联 JSON 而不是 URL 路径
How To Pass Inline JSON Instead of URL Path
你能看一下 This Demo 并告诉我如何传递 Javascript 对象,例如
var projects = [
{ "ProjectID":"15260", "Longitude":"-118.641508", "Latitude":"51.949915" },
{ "ProjectID":"17043", "Longitude":"-125.444557", "Latitude":"51.097552"},
.....
{ "ProjectID":"17088", "Longitude":"-124.160699", "Latitude":"50.897618" }
];
而不是
中的 URL
var photos = esriRequest({
url: "data/1000-photos.json",
handleAs: "json"
});
photos.then(addClusters, error);
});
如您所见,esriRequest()
正在处理来自服务器的 JSON 文件 (data/1000-photos.json),但在我的例子中,我有一个 jQuery Ajax 在 .done()
上调用 returns 相同的数据,我不想将它们保存在 saerver 上。
我已经尝试删除 esriRequest()
并像
一样直接将 addClusters()
加载到地图中
map.on("load", addClusters);
function addClusters() {
var photoInfo = {};
var wgs = new SpatialReference({
"wkid": 4326
});
photoInfo.data = arrayUtils.map(function() {
for (var i = 0; i < projects.length; i++) {
var latlng = new Point(parseFloat(projects.lng), parseFloat(projects.lat), wgs);
var webMercator = webMercatorUtils.geographicToWebMercator(latlng);
var attributes = {
"Caption": p.caption,
"Name": p.full_name,
"Image": p.image,
"Link": p.link
};
return {
"x": webMercator.x,
"y": webMercator.y,
"attributes": attributes
};
}
});
但是 photoInfo.data
还是空的!
photoInfo.data = arrayUtils.map(function() {
for (var i = 0; i < projects.length; i++) {
var latlng = new Point(parseFloat(projects.lng), parseFloat(projects.lat), wgs);
我在这里看到了几个问题:
- 您正在调用
map
(它接受一个数组和一个函数)但您只传递了一个参数。
- 您在
map
中有一个 for
循环。这毫无意义。
- 您访问
projects.lng
(整个数组)而不是 projects[i].lng
(当前元素)。
- 您的对象没有
lng
或 lat
属性(或 caption
、full_name
、image
、link
).
试试这样的方法:
photoInfo.data = arrayUtils.map(projects, function(p) {
var latlng = new Point(parseFloat(p.Longitude), parseFloat(p.Latitude), wgs);
var webMercator = webMercatorUtils.geographicToWebMercator(latlng);
var attributes = {
"Caption": "Project ID: " + p.ProjectID
};
return {
"x": webMercator.x,
"y": webMercator.y,
"attributes": attributes
};
});
您的照片字段似乎包含照片上的数据。但是这个link需要跨服务器访问。
你能看一下 This Demo 并告诉我如何传递 Javascript 对象,例如
var projects = [
{ "ProjectID":"15260", "Longitude":"-118.641508", "Latitude":"51.949915" },
{ "ProjectID":"17043", "Longitude":"-125.444557", "Latitude":"51.097552"},
.....
{ "ProjectID":"17088", "Longitude":"-124.160699", "Latitude":"50.897618" }
];
而不是
中的URL
var photos = esriRequest({
url: "data/1000-photos.json",
handleAs: "json"
});
photos.then(addClusters, error);
});
如您所见,esriRequest()
正在处理来自服务器的 JSON 文件 (data/1000-photos.json),但在我的例子中,我有一个 jQuery Ajax 在 .done()
上调用 returns 相同的数据,我不想将它们保存在 saerver 上。
我已经尝试删除 esriRequest()
并像
addClusters()
加载到地图中
map.on("load", addClusters);
function addClusters() {
var photoInfo = {};
var wgs = new SpatialReference({
"wkid": 4326
});
photoInfo.data = arrayUtils.map(function() {
for (var i = 0; i < projects.length; i++) {
var latlng = new Point(parseFloat(projects.lng), parseFloat(projects.lat), wgs);
var webMercator = webMercatorUtils.geographicToWebMercator(latlng);
var attributes = {
"Caption": p.caption,
"Name": p.full_name,
"Image": p.image,
"Link": p.link
};
return {
"x": webMercator.x,
"y": webMercator.y,
"attributes": attributes
};
}
});
但是 photoInfo.data
还是空的!
photoInfo.data = arrayUtils.map(function() { for (var i = 0; i < projects.length; i++) { var latlng = new Point(parseFloat(projects.lng), parseFloat(projects.lat), wgs);
我在这里看到了几个问题:
- 您正在调用
map
(它接受一个数组和一个函数)但您只传递了一个参数。 - 您在
map
中有一个for
循环。这毫无意义。 - 您访问
projects.lng
(整个数组)而不是projects[i].lng
(当前元素)。 - 您的对象没有
lng
或lat
属性(或caption
、full_name
、image
、link
).
试试这样的方法:
photoInfo.data = arrayUtils.map(projects, function(p) {
var latlng = new Point(parseFloat(p.Longitude), parseFloat(p.Latitude), wgs);
var webMercator = webMercatorUtils.geographicToWebMercator(latlng);
var attributes = {
"Caption": "Project ID: " + p.ProjectID
};
return {
"x": webMercator.x,
"y": webMercator.y,
"attributes": attributes
};
});
您的照片字段似乎包含照片上的数据。但是这个link需要跨服务器访问。