如何使用JavaScript从网页存储网页/数据?

问题描述 投票:1回答:1

我想使用JavaScript以JSON格式在本地存储此页面Tableau Public Gallery feed。我已经查找过脚本和代码片段但是我找不到任何有用的东西,因为每次运行代码时我都会得到相同的错误。

Access to XMLHttpRequest at 'https://public.tableau.com/en-us/s/gallery/feed' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

以下是我目前使用的代码。

  $.ajax({

     url:"https://public.tableau.com/en-us/s/gallery/feed",
     method: 'GET',
     dataType:'JSON',
     headers: {
         'Access-Control-Allow-Origin': '*'
     },
     success: function(response) {
         console.log(response);
     }
});

我也试过使用POSTMAN。它还给出了无法获得任何响应的错误。是因为Tableau网站的限制还是我做错了什么。

PS:我试图在Angular 7项目中实现这一点。

javascript json angular
1个回答
2
投票

除非https://public.tableau.com/en-us/s/gallery/feed在响应中提供Access-Control-Allow-Origin,否则您将无法在浏览器上的其他域中执行此操作。我建议的是建立一个后端端点(可能通过NodeJS)来调用它而不是前端,然后从你的代码中调用该端点。在后端你不会面对Access-Control-Allow-Origin错误,这就是为什么我建议你作为你的代理。

如果您决定使用NodeJS作为后端,则可以执行以下操作:

运行npm install --save express以安装Express for Node(节点服务器框架)

创建一个这样的结构:

enter image description here

的index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script src="http://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
        crossorigin="anonymous"></script>
    <script>
        $.ajax({
            url: "/api/tableau-gallery-feed",
            method: 'GET',
            success: function (response) {
                console.log(response);
            }
        });
    </script>
</body>
</html>

index.js

var express = require('express')
var https = require('https')
var app = express()

app.use(express.static('public'))

app.get('/api/tableau-gallery-feed', function (req, res) {
    https.get('https://public.tableau.com/en-us/s/gallery/feed', function (data) {
        data.setEncoding('utf8')
        let rawData = ''
        data.on('data', function (chunk) {
            rawData += chunk
        })
        data.on('end', function () {
            res.end(rawData)
        });
    })
})

app.listen(8888, () => console.log('Server started.'))

然后运行node index.js启动服务器

转到localhost:8888查看您的页面,如果您检查控制台,则应记录数据。

© www.soinside.com 2019 - 2024. All rights reserved.