对反射的响应具有无效的HTTP状态代码500

时间:2017-06-30 07:31:21

标签: javascript jquery html ajax yelp

我正在尝试对Yelp Fusion API进行简单的ajax调用。我使用Yelp提供的client_id和client_secret做了一个' POST'调用Postman并根据Yelp API文档接收访问令牌。此访问令牌可用于验证api调用。获得访问令牌后,我使用邮递员来获取访问权限。致电/ business / search端点并获取相关的业务信息。下图显示了进行呼叫所需的相应标头和参数:

Postman Headers, Parameters, and Response

点击' SEND'在Postman中,JSON响应代码显示在Postman(上一个图像的底部),这是我正在寻找的结果。 Postman还有一个功能来生成调用所需的代码,我将生成的ajax请求插入到我的程序中:

var settings = {
    "async": true,
    "crossDomain": true,
    "url": "https://api.yelp.com/v3/businesses/search?term=delis&latitude=37.786882&longitude=-122.399972",
    "method": "GET",
    "headers": {
        "authorization": "Bearer 0P*****************x",
        "cache-control": "no-cache",
        "postman-token": "30*************7"
    },
    "data": {
        "grant_type": "client_credientials",
        "client_secret": "tp***************m",
        "client_id": "RO**********w"
    }
}

$.ajax(settings).done(function (response) {
   console.log(response);
});

现在,当我在页面上单击提交按钮时,我想在控制台中显示响应。但是,虽然Postman似乎能够正确地进行ajax调用并收到正确的响应,但Google Chrome浏览器会显示以下错误:Response for preflight has invalid HTTP status code 500。根据我的理解,当OPTIONS方法向资源发出HTTP请求以确定实际请求是否可以安全发送时,预检请求中会出现第一个错误。但是,我很难理解Postman如何能够毫无问题地拨打电话,但Google Chrome无法解决问题。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

这是一个典型的CORS场景

预检请求是浏览器针对跨域调用发出的HTTP请求,以检查您的域是否具有正确的“权限”来确定实际请求是否可以安全发送

预检请求会双重检查服务器是否设置了某些标头:例如

"Access-Control-Allow-Origin": "*" 
"Access-Control-Allow-Methods": "GET, POST"
"Access-Control-Allow-Headers: "X-Custom-Header"

基本上指定了被授予访问权限的域列表,允许方法(获取,放置,发布等)和允许标头。 你没有在Postman中看到这个错误,因为它没有向服务器发出任何预检请求,它只是绕过任何与CORS相关的问题

由于您无法控制Yelp Fusion API后端,因此您可以制作一个简单的后端来发出请求(Cors does not seem to be supported