获取Json文件时出错

时间:2018-02-18 11:53:54

标签: javascript jquery html json web-scraping

我正在尝试为脚本创建代码以检查Udemy上的优惠券代码的有效性。课程编号为" 1524736"和此案例的CouponCode是" UDEMYSTUDIO"。

我使用$ .getJSON从网站请求信息,但它无法使用错误:

  

无法加载   https://www.udemy.com/api-2.0/course-landing-components/1524736/me/?components=redeem_coupon&couponCode=UDEMYSTUDIO:   No' Access-Control-Allow-Origin'标题出现在请求的上   资源。起源' null'因此不允许访问。

我如何解决它,有没有更好的方法呢? 在此先感谢。

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

 <!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>

1 个答案:

答案 0 :(得分:1)

  

跨源资源共享(CORS)是一种使用的机制   额外的HTTP标头,以允许用户代理获得访问权限   从不同来源(域)的服务器中选择的资源   目前正在使用的网站。用户代理生成跨源HTTP   请求来自不同域,协议,   或端口,而不是当前文件来源的端口。

由于您的网站托管在与udemy不同的域中,然后明确允许您从特定域(或所有域)访问其资源,因此浏览器将拒绝该响应,因为它执行CORS政策。

了解更多here

你如何解决这个问题?

  1. 检查udemy是否公开了您可以使用的api或某种跨域模式(jsonp?)。

  2. 向服务器(同一个域)创建请求,服务器将创建服务器到服务器请求到udemy并返回响应。