GET与Postman合作,但没有与Ajax合作?

时间:2015-07-16 23:53:36

标签: javascript jquery ajax

我尝试从托管某些帐户数据的服务器执行简单的GET请求。该请求需要Authorization标头才能正常运行。我已经执行了GET请求并在Postman中成功检索了数据,但是尝试通过Ajax在Javascript中执行此操作会导致无效的HTTP状态代码405"错误。

以下是指向小提琴的链接和Postman设置的屏幕截图。谢谢!

$.ajax({
    beforeSend: function(xhrObj){
            xhrObj.setRequestHeader("Authorization","Bearer tj7LTLycpQC6DRup5BkHUO7uVbYaAZI40");
    },
    type: "GET",
    url: "https://api05.iq.questrade.com/v1/accounts",
    success: function(e){
            console.log(e)
    }
});

http://jsfiddle.net/Ldjbp2j8/1/

POSTMAN SETTINGS

2 个答案:

答案 0 :(得分:10)

来自Chrome的JS控制台:

  

无法加载资源:服务器响应状态为405(方法不允许)

由于您要添加授权标头,因此您已将请求复杂。这要求浏览器设置preflight OPTIONS request以请求发送复杂请求的权限。

您发出请求的服务器正在回复说OPTIONS请求不允许访问该URL。

您需要修改服务器,以便它适当地响应预检CORS请求。

Postman不需要发出预检请求,因为您的浏览器信任Postman的代码。它不知道它是否可以信任它从JSFiddle(AKA 潜在邪恶的黑客网站)收到的数据与数据api05.iq.questrade.com(AKA 潜在的网上银​​行或公司内联网)网站)愿意与之分享。

答案 1 :(得分:1)

查看控制台错误:

XMLHttpRequest cannot load https://api05.iq.questrade.com/v1/accounts.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://fiddle.jshell.net' is therefore not allowed access. The response had HTTP status code 405.

这是CORS问题。如果域与运行代码的域不匹配,浏览器会向服务器发送OPTIONS即又是飞行前请求。 并且您还必须将所需的标头添加到响应中。

您必须修改服务器才能处理它。

您也可以使用JSONP作为替代方案。