我正在尝试为现有的Web应用程序构建API,以便为该服务开发移动应用程序。目标是提供JSON-Feeds以在cordova-app环境中显示内容。
我的.ajax电话看起来像这样:
$.ajax({
type: "POST",
headers: {
"Authorization" : '3d5cd0938b8db73d62e246e561c86f'
},
data: {
scat: false,
mcat: 8,
page: 1
},
dataType: 'json',
url: "http://snake2.test-api/services/rest/v1/category/",
success: function(data) {
alert('OK');
},
error: function() {
alert('error');
},
beforeSend: setHeader
});
理论上,设置有效,但我无法正确完成jquery ajax请求。虽然Chrome中的“Advanced Rest Client”提供了所需的JSON-Feed,但我的AjAX请求却没有。通过查看API-Server的apache日志,它会显示标题看起来与它们看起来不同。
在Google Advanced Rest Client中:
Status
200 OK Show explanation Loading time: 578
Request headers
CSP: active
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36
Authorization: 3d5cd0938b8db73d62e246e561c86f
Content-Type: application/x-www-form-urlencoded
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,es;q=0.2
AlexaToolbar-ALX_NS_PH: AlexaToolbar/alxg-3.3
Response headers
Date: Mon, 08 Jun 2015 19:38:09 GMT
Server: Apache
Cache-Control: max-age=604800
Expires: Mon, 15 Jun 2015 19:38:09 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 1264
Keep-Alive: timeout=10, max=500
Connection: Keep-Alive
Content-Type: application/json
我的ajax请求通过应用程序触发,为标题提供以下服务器日志:
+28639:556f87c3:0 | OPTIONS / v1 / category / HTTP / 1.1 | Host:snake2.test-api | Connection:keep-alive | Pragma:no-cache | Cache-Control:no-cache | Access- Control-Request-Method:POST |来源:http%3a // 127.0.0.1 | User-Agent:Mozilla / 5.0(iPhone; CPU iPhone OS 7_0,如Mac OS X; en-us)AppleWebKit / 537.51.1(KHTML,像Gecko)Version / 7.0 Mobile / 11A465 Safari / 9537.53 | Access-Control-Request-Headers:accept,api_key,authorization,content-type | Accept: / | Referer:http%3a // 127.0 .0.1 / ~merlin / test_apps / www / index_search.html | Accept-Encoding:gzip,deflate,sdch | Accept-Language:de-DE,de; q = 0.8,en-US; q = 0.6,en; q = 0.4,ES; q = 0.2 | AlexaToolbar-ALX_NS_PH:AlexaToolbar / alxg-3.3 -28639:556f87c3:0
很明显,标题内部缺少授权令牌,不知何故,“选项”一词出现了。
这也是我从chrome上的控制台错误中获得的:
OPTIONS http://snake2.test-api/v1/category/ 404 (Not Found)
m.ajaxTransport.send @ jquery.js:4
m.extend.ajax @ jquery.js:4
(anonymous function) @ index_search.html:26
m.Callbacks.j @ jquery.js:2
m.Callbacks.k.fireWith @ jquery.js:2
m.extend.ready @ jquery.js:2J @ jquery.js:2
index_search.html:1 XMLHttpRequest无法加载http://snake2.test-api/v1/category/。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://127.0.0.1”访问。响应的HTTP状态代码为404.
我知道交叉/浏览器安全问题会触发消息来源。但是,这不应该是在cordova内部的情况,而不是。这里的问题是,以某种方式在头文件中发送的授权密钥不起作用,我的语法将其转换为“OPTIONS”。