1
我面臨着一個常見的問題與原型Ajax請求的CORS。我搜索了大約2個小時,但仍無法解決問題。我嘗試了不同的方法。沒有什麼幫助我。我需要在我的代碼中設置orgin,Access-Control-Allow-Origin
等。我提到以下網站,但他們沒有幫助。跨原點資源共享原型JSON
Cross Origin Resource Sharing with PrototypeJS
new Ajax.Request("http://localhost:4000/somefolder/some.xml", {
//new Ajax.Request(source, {
asynchronous: false,
method: 'get',
contentType: 'text/xml',
//requestHeaders: ('Access-Control-Allow-Origin', '*','Access-Control-Allow-Methods','GET','Access-Control-Max-Age','1000','Access-Control-Allow-Headers','*'),
//requestHeaders: (Access-Control-Allow-Origin, *,Access-Control-Allow-Methods,GET,Access-Control-Max-Age,1000,Access-Control-Allow-Headers,*),
//onCreate: function(request) {
// request.transport.setRequestHeader = Prototype.emptyFunction;
// },
requestHeaders: {Access: '*/*'},
onSuccess: function(result) {
alert(result.responseXML);
}
});
而且我得到如下回應:
Response Headersview source
Connection keep-alive
Content-Length 0
Content-Type text/html; charset=utf-8
Date Thu, 05 Jul 2012 08:58:08 GMT
X-Powered-By Express
Request Headersview source
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Access-Control-Request-He... x-prototype-version,x-requested-with
Access-Control-Request-Me... GET
Connection keep-alive
Host localhost:4000
Origin http://localhost:8080
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0
我送它作爲一個GET
請求,但它會作爲一個OPTIONS
請求。
我在響應中也添加了標題。仍然沒有幫助。
app.configure('development', function() {
app.use(express.errorHandler({
dumpExceptions :true,
showStack :true
}));
app.all('*', function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4000, http://localhost:8000');
res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE');
res.setHeader('Access-Control-Allow-Headers', 'x-prototype-version,x-requested-with');
res.setHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
res.setHeader('Accept-Encoding', 'gzip, deflate');
res.setHeader('Accept-Language', 'en-us,en;q=0.5');
res.setHeader("X-Requested-With", "XMLHttpRequest");
res.setHeader("Orgin", 'http://localhost:4000');
next()
});
});
的加入/體現響應:
Response Headersview source
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Access-Control-Allow-Head... x-prototype-version,x-requested-with
Access-Control-Allow-Meth... GET,POST,PUT,DELETE
Access-Control-Allow-Orig... http://localhost:4000, http://localhost:8000
Allow GET,POST,PUT,DELETE,TRACE,CONNECT,PROPFIND,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK,VERSION-CONTROL,REPORT,CHECKOUT,CHECKIN,UNCHECKOUT,MKWORKSPACE,UPDATE,LABEL,MERGE,BASELINE-CONTROL,MKACTIVITY,ORDERPATCH,ACL,SEARCH,PATCH,PURGE
Connection keep-alive
Content-Length 224
Content-Type text/html; charset=utf-8
Date Fri, 06 Jul 2012 06:20:51 GMT
Orgin http://localhost:4000
X-Powered-By Express
X-Requested-With XMLHttpRequest
Request Headersview source
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Access-Control-Request-He... x-prototype-version,x-requested-with
Access-Control-Request-Me... GET
Connection keep-alive
Host localhost:4000
Origin http://localhost:8080
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0
我還能做些什麼來解決這個問題?
我的應用程序(請求/ orgin服務器)在8000端口的Tomcat中運行。上述xml是一個靜態文件,由3000端口中的node + express(respondin server/host)提供。它只是從靜態路徑,即從快速文件夾結構的公用文件夾來的。 – Jak 2012-07-06 04:38:11
Tomcat服務器端口是8080 – Jak 2012-07-06 06:28:57
我找到了解決方案。簡單地將Prototype Ajax調用更改爲jQuery Ajax調用。並添加了「crossDomain:true」, – Jak 2012-08-14 05:58:27