Неожиданный токен ошибки обратного вызова jsonp модуля печати Mapfish:
Я разрабатываю один модуль печати с геосерверной печатью, геоэкстерами и открытыми слоями. У меня есть код загрузки с сайта Geoext, и он отлично работает. Когда этот код настроен на локальной машине, он не работает. Выдает ошибку о неожиданном токене: при вызове функции обратного вызова jsonp.
и мой код
Ext.require([
'GeoExt.component.Map',
'GeoExt.data.MapfishPrintProvider',
'GeoExt.data.serializer.TileWMS',
'GeoExt.data.serializer.Vector'
]);
var olMap;
var mapComponent;
var mapPanel;
Ext.application({
name: 'MapPanel',
launch: function() {
var description;
var extentLayer = new ol.layer.Vector({
source: new ol.source.Vector()
});
var bgLayer = new ol.layer.Tile({
source: new ol.source.TileWMS({
url: 'https://ows.terrestris.de/osm-gray/service',
params: {
LAYERS: 'OSM-WMS'
}
})
});
olMap = new ol.Map({
layers:
[
bgLayer,
extentLayer
],
view: new ol.View({
center: ol.proj.fromLonLat([-122.416667, 37.783333]),
zoom: 12
})
});
mapComponent = Ext.create('GeoExt.component.Map', {
map: olMap
});
console.log(mapComponent);
mapPanel = Ext.create('Ext.panel.Panel', {
title: 'GeoExt.data.model.print.Capability Example',
region: 'center',
layout: 'fit',
items: [mapComponent]
});
console.log(mapPanel);
description = Ext.create('Ext.panel.Panel', {
contentEl: 'description',
title: 'Description',
region: 'east',
width: 300,
border: false,
bodyPadding: 5
});
console.log(description);
/**
* A small utility method that will change the `baseURL` from https to
* http (if needed and possible), because the MapFish instance we are
* talking to currently cannot handle all 'https' requests.
*
* Please note that this is a restriction posed by the remote server, a
* correctly configured MapFish instance can very well handle https.
*
* @param {Array<Object>} layers An array of serialized layers.
* @return {Array<Object>} An array of serialized layers, https URLs
* will now point to their http-equivalent.
*/
var unHttpsLayers = function(layers) {
var changed = [];
Ext.each(layers, function(layer) {
var clone = Ext.clone(layer);
if (clone.baseURL && (/^https:/i).test(clone.baseURL)) {
clone.baseURL = clone.baseURL.replace('https', 'http');
}
changed.push(clone);
});
return changed;
};
/**
* Once the store is loaded, we can create the button with the
* following assumptions:
*
* * The button will print the first layout
* * The attributes used are the first of the above layout
* * We'll request the first dpi value of the suggested ones
* @param {GeoExt.data.MapfishPrintProvider} provider The print
* provider.
*/
var onPrintProviderReady = function(provider)
{
// this is the assumption: take the first layout and render an
// appropriate extent on the map
console.log(provider);
var capabilities = provider.capabilityRec;
console.log(capabilities);
var layout = capabilities.layouts().getAt(0);
console.log(layout);
var attr = layout.attributes().getAt(0);
console.log(attr);
var clientInfo = attr.get('clientInfo');
console.log(clientInfo);
var render = GeoExt.data.MapfishPrintProvider.renderPrintExtent;
console.log(render);
render(mapComponent, extentLayer, clientInfo);
mapComponent.getView().on('propertychange', function() {
extentLayer.getSource().clear();
render(mapComponent, extentLayer, clientInfo);
});
description.add({
xtype: 'button',
text: 'Print',
handler: function()
{
var spec = {
layout: layout.get('name'),
attributes: {}
};
var firstFeature = extentLayer.getSource().getFeatures()[0]; console.log(firstFeature);
var bbox = firstFeature.getGeometry().getExtent(); console.log(bbox);
var util = GeoExt.data.MapfishPrintProvider; console.log(util);
var mapView = mapComponent.getView(); console.log(mapView);
var serializedLayers = util.getSerializedLayers(
mapComponent,
function(layer) {
// do not print the extent layer
var isExtentLayer = (extentLayer === layer);
return !isExtentLayer;
}
);
serializedLayers = unHttpsLayers(serializedLayers);
serializedLayers.reverse();
spec.attributes[attr.get('name')] = {
bbox: bbox,
dpi: clientInfo.dpiSuggestions[0],
layers: serializedLayers,
projection: mapView.getProjection().getCode(),
rotation: mapView.getRotation()
};
Ext.create('Ext.form.Panel', {
standardSubmit: true,
url: '/geoserver1/pdf/',
method: 'POST',
items: [
{
xtype: 'textfield',
name: 'spec',
value: Ext.encode(spec)
}
]
}).submit();
}
});
};
//http://localhost:8585/geoext_exam/test/data/PrintCapabilities.json
Ext.create('GeoExt.data.MapfishPrintProvider', {
//url: '/geoserver1/pdf/info.json',
url:'/geoserver1/pdf/info.json',
listeners: {
ready: onPrintProviderReady
}
});
Ext.create('Ext.Viewport', {
layout: 'border',
items: [
mapPanel,
description
]
});
}
});
в этом коде я изменяю URL, который вызывается из геосервер (прокси), и это дает мне вывод в сети как
Оригинальный рабочий пример geoext находится здесь
Но я не могу найти ошибку и как изменить этот код. Есть ли другое решение для этого.
Заранее спасибо.