我想生成一个PDF文件打印使用GeoExt地图,但已遇到一个问题。在Chrome我得到的错误信息:GeoExt PDF打印:“错误消息:来源http:// localhost:55608是不允许的访问控制允许来源”
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上,我得到了一个非常不同的行为。我没有得到任何错误消息,但我最终触发printexception一个错误信息“通讯故障
我坚持和的想法,谁能帮助
这里是代码:?
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浏览器分开的问题,所以不能在那里测试它。
您需要设置一个'Access-Control-Allow-Origin'标头。 – SLaks 2012-04-18 16:10:46
如何设置Access-Control-Allow-Origin标题? – user1341833 2012-04-23 08:27:23
这取决于您的服务器 – SLaks 2012-04-23 12:36:10