The technique used here could also be used to get info about a map service or any other service published to the services directory.
<!DOCTYPE html>
<html>
<head>
<title>Get ArcGIS Server Map Service Layer Field Names</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="https://js.arcgis.com/3.46/esri/css/esri.css">
<style>
body{
font-family: "Arial Unicode MS, Arial, sans-serif";
}
#content {
width: 800px; height: 350px; padding: 5px; overflow: auto;
border: solid 2px #AAAAAA; background-color: #FFFFFF;
border-radius: 5px;
-moz-box-shadow: 0 0 0.5em black; -webkit-box-shadow: 0 0 0.5em black; -o-box-shadow: 0 0 0.5em black; box-shadow: 0 0 0.5em black;
}
.failure { color: red; }
#status { font-size: 12px; }
</style>
<script src="https://js.arcgis.com/3.46/"></script>
<script>
require(["dojo/dom", "dojo/on", "dojo/dom-class", "dojo/_base/json", "dojo/_base/array", "dojo/string", "esri/request", "dojo/domReady!"], function(dom, on, domClass, dojoJson, array, dojoString, esriRequest) {
dom.byId("url").value = "https://services.arcgis.com/V6ZHFr6zdgNZuVG0/ArcGIS/rest/services/ZillowNeighborhoods-CA/FeatureServer/0";
dom.byId("content").value = "";
//handle the Go button's click event
on(dom.byId("submitRequest"), "click", getContent);
function getContent(){
var contentDiv = dom.byId("content");
contentDiv.value = "";
domClass.remove(contentDiv, "failure");
dom.byId("status").innerHTML = "Downloading...";
//get the url
var url = dom.byId("url").value;
if(url.length === 0){
alert("Please enter a URL");
return;
}
var requestHandle = esriRequest({
"url": url,
"content": {
"f": "json"
},
"callbackParamName": "callback"
});
requestHandle.then(requestSucceeded, requestFailed);
}
function requestSucceeded(response, io){
var fieldInfo, pad;
pad = dojoString.pad;
//toJson converts the given JavaScript object
//and its properties and values into simple text
dojoJson.toJsonIndentStr = " ";
console.log("response as text:\n", dojoJson.toJson(response, true));
dom.byId("status").innerHTML = "";
//show field names and aliases
if ( response.hasOwnProperty("fields") ) {
console.log("got some fields");
fieldInfo = array.map(response.fields, function(f) {
return pad("Field:", 8, " ", true) + pad(f.name, 25, " ", true) +
pad("Alias:", 8, " ", true) + pad(f.alias, 25, " ", true) +
pad("Type:", 8, " ", true) + pad(f.type, 25, " ", true);
});
dom.byId("content").value = fieldInfo.join("\n");
} else {
dom.byId("content").value = "No field info found. Please double-check the URL.";
}
}
function requestFailed(error, io){
domClass.add(dom.byId("content"), "failure");
dojoJson.toJsonIndentStr = " ";
dom.byId("content").value = dojoJson.toJson(error, true);
}
});
</script>
</head>
<body>
<p>Enter the URL for a layer in a map service to access metadata about a layer in a map service using esriRequest.</p>
<p>
<input type="text" id="url" size="105"/>
<input id="submitRequest" type="button" value="GO" />
<span id="status"></span>
</p>
<h2>Content</h2>
<p>Check the console for the full response. Here we'll display Field names, aliases and types:</p>
<textarea id="content"></textarea>
</body>
</html>