我正在尝试为脚本编写代码以检查Udemy上的优惠券代码的有效性。课程ID为“ 1524736”,这种情况下的优惠券代码为“ UDEMYSTUDIO”。

我正在使用$ .getJSON从网站上请求信息,但是它无法处理错误:


  加载失败
  https://www.udemy.com/api-2.0/course-landing-components/1524736/me/?components=redeem_coupon&couponCode=UDEMYSTUDIO
  请求中没有'Access-Control-Allow-Origin'标头
  资源。因此,不允许访问原始“空”。


我该如何解决?还有更好的方法吗?
提前致谢。

下面是我正在使用的代码。

 <!DOCTYPE html>
<html lang="en">
<head>
<title>JavaScript - read JSON from URL</title>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
</head>

<body>
    <div class="mypanel"></div>

    <script>
        var url= 'https://www.udemy.com/api-2.0/course-landing-components/1524736/me/?components=redeem_coupon&couponCode=UDEMYSTUDIO'
    $.getJSON(url, function(data) {

        var text = `Apply_State: ${data.redeem_coupon.is_applied}<br>
                    Error: ${data.redeem_coupon.error}<br>
                    Code: ${data.redeem_coupon.code}`


        $(".mypanel").html(text);
    });
    </script>

</body>
</html>

最佳答案

跨域资源共享(CORS)是一种使用
  其他HTTP标头,以使用户代理获得访问权限
  从与源(域)不同的服务器上选择的资源
  当前正在使用的网站。用户代理创建跨域HTTP
  当请求来自其他域,协议,
  或端口,而不是当前文档所来自的端口。


由于您的站点托管在与udemy不同的域中,并且没有明确允许您从特定域(或所有域)访问其资源,因此浏览器将强制执行CORS策略,因此将拒绝响应。

阅读更多here

您如何解决这个问题?


检查udemy是否公开了可以使用的api或某种跨域模式(jsonp?)。
向您的服务器创建一个请求(相同的域),该服务器将创建一个服务器到服务器的请求,发送给udemy并返回响应。

09-20 06:58