我在.../arcgisserver/rest/services/CRD/CRD2/FeatureServer/0
中有JSON数据。
我想解析它并将其存储在变量中。为此,我使用下面的代码:
esri.request({
url:baseURL,
content:{f:"json"},
callbackParamName:"callback",
load:getServiceDetails,
error:esriConfig.defaults.io.errorHandler
});
function getServiceDetails(response, args) {
alert(response);
var info = [];
dojo.forEach(response.folders, function (folder) {
info.push("Folder: " + folder + "<br/>");
});
dojo.forEach(response.services, function (service) {
info.push("Service Details: " + service.name + " " + service.type + "<br/>");
});
console.log(info);
但是info
是空的。我的代码中有什么错误?
答案 0 :(得分:2)
我已根据您在以下评论中的说明修改了此答案。
您的代码尝试执行的操作是列出rest services存储库文件夹中的所有文件夹和服务。该文件夹的url是您的baseURL变量。问题是你的baseURL变量设置为
http://yourserver/arcgisserver/rest/services/CRD/CRD2/FeatureServer/0
,这实际上不是文件夹的地址,而是特定要素服务的地址。要素服务具有不同的响应参数。变量文件夹和服务对于服务毫无意义,因为它不包含文件夹或服务,但在这种情况下是功能描述。例如,如果您希望查询要素类并了解其属性,请保持您的baseURL不变,并用
替换forEach循环。dojo.forEach(response.fields, function (field) {
info.push("Field: " + field.name + "<br/>");
您将获得包含功能字段名称的列表(应该可以使用,而不是测试)。
但是,如果您的目标是列出您的休息服务存储库中的所有文件夹和服务,则必须将baseURL更改为以下内容:
http://yourserver/arcgisserver/rest/services
您的代码应该有效。
提示:当您在浏览器中输入带有f=json
参数的网址时,您可以始终检查您的响应状态。像这样:
http://yourserver/arcgisserver/rest/services?f=json
您将收到一个json响应,您可以检查是否包含所需的属性。