AJAX 从 GeoServer 检索图层名称的回调因断言错误而失败
AJAX callback to retrieve layers name from GeoServer fails with an assertion error
我正在写一些东西来从我的 GeoServer 中获取所有图层的名称。这是我的代码:
function getData() {
return $.ajax({
url: "http://localhost:8080/geoserver/ows?service=wms&version=1.1.0&request=GetCapabilities",
type: 'GET'
});
}
function onComplete(data) {
var parser = new ol.format.WMSCapabilities();
var result = parser.read(data.responseText);
var layersArray = result.Capability.Layer.Layer;
layersNameArray = [];
for(i=0;i<layersArray.length;i++){
layersNameArray.push(layersArray[i].Name)
}
return layersNameArray
}
getData().done(onComplete)
我远不是异步调用方面的专家,但我认为这个应该可行。如果我将 getData()
结果存储在一个变量中,并将 运行 逐行存储在 onComplete()
函数中,则代码有效。但是当我 运行 带有 getData().done(onComplete)
的代码时,它总是在带有 Assertion error: Failure
的 var result = parser.read(data.responseText);
行失败。
知道为什么这不起作用吗?
编辑:
此代码有效,但未返回任何内容。我希望函数输出 layersNameArray
变量。我该如何进行?
function getData() {
$.ajax({
url: "http://localhost:8080/geoserver/ows?service=wms&version=1.1.0&request=GetCapabilities",
type: 'GET',
success: function(response) {
var parser = new ol.format.WMSCapabilities();
var result = parser.read(response);
var layersArray = result.Capability.Layer.Layer;
layersNameArray = [];
for(i=0;i<layersArray.length;i++){
layersNameArray.push(layersArray[i].Name)
}
return layersNameArray
}
});
}
您可以使用 Jquery 回调功能,
以这种方式调用您的函数,
getData(function(responsefromAjax){
alert('the response from ajax is :' +responsefromAjax);
// what ever logic that needs to run using this ajax data
});
并以这种方式更改您的方法。
function getData(callback) { // passing the function as parameter
$.ajax({
url: "http://localhost:8080/geoserver/ows?service=wms&version=1.1.0&request=GetCapabilities",
type: 'GET',
success: function(response) {
var parser = new ol.format.WMSCapabilities();
var result = parser.read(response);
var layersArray = result.Capability.Layer.Layer;
layersNameArray = [];
for(i=0;i<layersArray.length;i++){
layersNameArray.push(layersArray[i].Name)
}
callback(layersNameArray); //this will execute your function defined during the function call. As you have passed the function as parameter.
}
});
}
如果有帮助请告诉我
我正在写一些东西来从我的 GeoServer 中获取所有图层的名称。这是我的代码:
function getData() {
return $.ajax({
url: "http://localhost:8080/geoserver/ows?service=wms&version=1.1.0&request=GetCapabilities",
type: 'GET'
});
}
function onComplete(data) {
var parser = new ol.format.WMSCapabilities();
var result = parser.read(data.responseText);
var layersArray = result.Capability.Layer.Layer;
layersNameArray = [];
for(i=0;i<layersArray.length;i++){
layersNameArray.push(layersArray[i].Name)
}
return layersNameArray
}
getData().done(onComplete)
我远不是异步调用方面的专家,但我认为这个应该可行。如果我将 getData()
结果存储在一个变量中,并将 运行 逐行存储在 onComplete()
函数中,则代码有效。但是当我 运行 带有 getData().done(onComplete)
的代码时,它总是在带有 Assertion error: Failure
的 var result = parser.read(data.responseText);
行失败。
知道为什么这不起作用吗?
编辑:
此代码有效,但未返回任何内容。我希望函数输出 layersNameArray
变量。我该如何进行?
function getData() {
$.ajax({
url: "http://localhost:8080/geoserver/ows?service=wms&version=1.1.0&request=GetCapabilities",
type: 'GET',
success: function(response) {
var parser = new ol.format.WMSCapabilities();
var result = parser.read(response);
var layersArray = result.Capability.Layer.Layer;
layersNameArray = [];
for(i=0;i<layersArray.length;i++){
layersNameArray.push(layersArray[i].Name)
}
return layersNameArray
}
});
}
您可以使用 Jquery 回调功能,
以这种方式调用您的函数,
getData(function(responsefromAjax){
alert('the response from ajax is :' +responsefromAjax);
// what ever logic that needs to run using this ajax data
});
并以这种方式更改您的方法。
function getData(callback) { // passing the function as parameter
$.ajax({
url: "http://localhost:8080/geoserver/ows?service=wms&version=1.1.0&request=GetCapabilities",
type: 'GET',
success: function(response) {
var parser = new ol.format.WMSCapabilities();
var result = parser.read(response);
var layersArray = result.Capability.Layer.Layer;
layersNameArray = [];
for(i=0;i<layersArray.length;i++){
layersNameArray.push(layersArray[i].Name)
}
callback(layersNameArray); //this will execute your function defined during the function call. As you have passed the function as parameter.
}
});
}
如果有帮助请告诉我