我正在尝试生成一个 pdf 文件以使用 GeoExt 打印地图,但遇到了问题。在 Chrome 上,我收到错误消息:
XMLHttpRequest cannot load http://Howard:8080/geoserver/pdf/create.json. Origin http://localhost:55608 is not allowed by Access-Control-Allow-Origin.
我认为错误消息告诉我它与代理有关,所以我尝试将以下内容添加到 Config.yaml 但不是运气:
- !localMatch
dummy: true
- !ipMatch
host: 0.0.0.0
mask: 0.0.0.0
这应该允许所有本地 IP 地址和所有主机访问 Howard:8080 中的 create.json,但由于某种原因,我仍然收到错误消息。
但是,在 Firefox 上,我的行为略有不同。我没有收到任何错误消息,但最终触发了打印异常并显示错误消息“通信失败。
我被卡住了,没有想法,有人可以帮忙吗?
这是代码:
var printProvider = new GeoExt.data.PrintProvider({
//method: "GET", // "POST" recommended for production use
method: "POST", // "POST" recommended for production use
//capabilities: g_printCapabilities, // provide url instead for lazy loading
url: OpenLayers.ProxyHost + "http://Howard:8080/geoserver/pdf/",
//url: "http://Howard:8080/geoserver/pdf/",
autoLoad: true,
customParams: {
mapTitle: "GeoExt Printing Demo",
comment: "This demo shows how to use GeoExt.PrintMapPanel with OSM"
}
});
var printPage = new GeoExt.data.PrintPage({
printProvider: printProvider
});
var mapPanel = new GeoExt.MapPanel({
title: "Map",
region: "center",
height: 400,
width: 600,
map: map,
bbar: ["->", {
text: "Print",
handler: function() {
// convenient way to fit the print page to the visible map area
printPage.fit(mapPanel, true);
printProvider.print(mapPanel, printPage);
}
}]
});
// create a panel and add the map panel and grid panel
// inside it
var mainPanel = new Ext.Panel({
renderTo: "mainpanel",
layout: "border",
height: 800,
width: 600,
items: [mapPanel]
});
编辑:
我在javascript中添加了以下代码:
var invocation = new XMLHttpRequest();
var url = 'http://Howard:8080/geoserver/pdf/create.json';
function callOtherDomain() {
if(invocation) {
invocation.open('POST', url, true);
invocation.onreadystatechange = function (){
alert("invocation.onreadystatechange");
}
invocation.send();
}
}
callOtherDomain();
但我仍然收到错误消息。我是否在 Howard 服务器上添加 Access-Control-Allow-Origin 标头?如果是这样,我该怎么做?
编辑2:
我在后面的代码中添加了以下内容:
Response.AddHeader("Access-Control-Allow-Origin", "*");
Response.AddHeader("Access-Control-Allow-Headers", "POST");
Response.AddHeader("Access-Control-Allow-Headers", "GET");
我还放置了以下内容:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
机器上添加的两个代码块将调用我的 web.config 文件中的 pdf 文件,但仍然没有运气。
编辑 3。
如果我不包含任何矢量图层,pdf 文件似乎可以正确生成。这适用于 Firefox 和 chrome。我对 IE 有单独的问题,因此无法在那里进行测试。