我想使用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项目中实现这一点。
除非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(节点服务器框架)
创建一个这样的结构:
的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查看您的页面,如果您检查控制台,则应记录数据。