【问题标题】:Error fetching Json File获取 Json 文件时出错
【发布时间】:2018-02-18 11:53:53
【问题描述】:

我正在尝试为脚本编写代码以检查 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”标头 资源。因此,不允许访问 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>

【问题讨论】:

    标签: javascript jquery html json web-scraping


    【解决方案1】:

    跨域资源共享 (CORS) 是一种使用 额外的 HTTP 标头让用户代理获得访问权限 从不同来源(域)上的服务器中选择的资源 当前使用的站点。用户代理创建跨域 HTTP 请求从不同的域、协议、 或端口,而不是当前文档的来源。

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

    阅读更多here

    你如何解决这个问题?

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

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

    【讨论】:

    • 感谢您的帮助,您能否详细说明应该如何实现它,因为我是 Web 开发的初学者,多一点帮助真的会让我的事情变得更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2018-12-14
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多