我想生成一個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