I am using ExtJS ajax to send a data request to geoserver (which is in another domain different from web server), codes are as follows:
Ext.Ajax.request({ //send data request
url : '../proxy.py?url=' + dataUrl,
method : 'GET',
headers: {
'Content-Type': 'application/json'
},
success : function(response, opts) {
var eventData = Ext.decode(response.responseText); //decode into JSON
//parse eventData
},
failure: function(response, opts){
Ext.Msg.alert("Failure", "Failed to retrieve event, please check service connection at " + dataUrl);
}
});
since it relates to cross-domain issue, we employed a python proxy at web server, and put the GeoServer domain into the accessible list. If I put the request url in browser then I can get the JSON response; however by using ajax call in code, we got following error:
Could not determine geoserver request from http request GET /geoserver/ows?service=WFS HTTP/1.1
Accept-Encoding: identity
Host: XXXX
Connection: close
User-Agent: Python-urllib/2.5
I searched online, somebody said it's an issue related with proxy and the request headers. however, no detailed solution is found yet. I hope someone here can help me out.
thanks a lot!
UPDATE: using escape() to escape the request URL!
Answer
If you send in URL only:
/geoserver/ows?service=WFS
you get this error. Minimal URL should be:
/geoserver/ows?service=wfs&request=GetCapabilities
if you need capabilities call with this params. If you need GeoJSON request for layer URL should be like this:
UPDATE
in JS you should use encodeURIComponent to encode URL. escape() function shouldn't be used to encode URIs.
No comments:
Post a Comment