如何在JQuery的jquery ajax请求中发送额外的头文件

时间:2015-06-09 07:07:51

标签: jquery ajax json cordova http-headers

我正在尝试为现有的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”。

0 个答案:

没有答案