Как забрать данные из внешнего js функция({объект})
Есть такой такой внешний js в котором запускается функция с объектом
https://docs.google.com/spreadsheets/d/1iwGvYQZYe1oQU1809QG1qqJWUG84gxVLKyqWBWyvDqU/gviz/tq?sheet=goods&tq=where%20B%3D'A04'%20%20OR%20%20B %3D'A03' google.visualization.Query.setResponse({....как ие-то данные...}); я хочу эти данные забрать и показать в консоли на сайте
<script>
function google.visualization.Query.setResponse(data){ console.log(data)};
</script>
<script src="https://docs.google.com/spreadsheets/d/1iwGvYQZYe1oQU1809QG1qqJWUG84gxVLKyqWBWyvDqU/gviz/tq?sheet=goods&tq=where%20B%3D'A04'%20%20OR%20%20B%3D'A03'" type="text/javascript"> </script>
почему на мою функцию с точками ругается? нужно что-то еще до этого создать? |
Даже если имя функции будет содержать точку, присланный код не запустится, поскольку в глобальном объекте google должен быть visualization в котором Query в котором метод setResponse.
<pre id="pre">Loading...</pre>
<script>
(async function main() {
try {
const response = await fetch("https://docs.google.com/spreadsheets/d/1iwGvYQZYe1oQU1809QG1qqJWUG84gxVLKyqWBWyvDqU/gviz/tq?sheet=goods&tq=where%20B%3D'A04'%20%20OR%20%20B%3D'A03'");
const text = await response.text();
const getData = new Function(`return new Promise(setResponse => {
const google = { visualization: { Query: { setResponse } } };
${text}
})`);
const data = await getData();
/* вывод в консоль и на страницу */
console.log(data);
pre.textContent = JSON.stringify(data, null, " ");
} catch(error) {
pre.textContent = error.message;
console.error(error);
}
})();
</script>
|
еще вариант
<script>
fetch("https://docs.google.com/spreadsheets/d/1iwGvYQZYe1oQU1809QG1qqJWUG84gxVLKyqWBWyvDqU/gviz/tq?sheet=goods&tq=where%20B%3D'A04'%20%20OR%20%20B%3D'A03'")
.then(response => response.text())
.then(text => JSON.parse(text.replace(/^.*\s.*?\((.*)\);/m, '$1')))
.then(obj => {
console.log(obj);
alert(JSON.stringify(obj, null, " "));
})
.catch(e => console.log(e.message));
</script>
|
Спасибо большое. А можно сделать то же самое без fetch ?
Я запускаю скрипты с рабочего стола, поэтому браузер ругается на запросы (has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.) Эта функция с точками может быть callback функцией? JSONP получается, когда функция без точек в названии, а если есть точка, то вылетает ошибка. Как по-нормальному задать такую функцию с точками? как создать в "объекте google должен быть visualization в котором Query в котором метод setResponse." |
Цитата:
Цитата:
|
Цитата:
Спрашиваю, потому что у гугла есть АПИ, которое собирает данные безо всякого CORS (работает с рабочего стола) но оно огромное и тормознутое. Вместе с собой пакетом заливает кучу непонятных скриптов и CSS которые мне не нужны. Хотел ускорить этот вариант и забирать данные напрямую. cors-everywhere.glitch.me очень тормозит
<script>
var google = { visualization: { Query: { setResponse } } };
function google.visualization.Query.setResponse(data){ console.log(data)};
</script>
<script src="https://docs.google.com/spreadsheets/d/1iwGvYQZYe1oQU1809QG1qqJWUG84gxVLKyqWBWyvDqU/gviz/tq?sheet=goods&tq=where%20B%3D'A04'%20%20OR%20%20B%3D'A03'" type="text/javascript"> </script>
|
<body>
<script>
const send = msg => {
let el = document.createElement('script');
el.src = `https://docs.google.com/spreadsheets/d/1iwGvYQZYe1oQU1809QG1qqJWUG84gxVLKyqWBWyvDqU/gviz/tq?${msg}`;
document.body.appendChild(el);
}
const google = {
visualization: {
Query: {
setResponse: value => {
console.log(value)
}
}
}
}
send("sheet=goods&tq=where%20B%3D'A04'%20%20OR%20%20B%3D'A03'")
</script>
</body>
как просили JsonP |
sovsem-nub,
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
function setResponse(data){ console.log(data)};
var google = { visualization: { Query: { setResponse } } };
</script>
<script src="https://docs.google.com/spreadsheets/d/1iwGvYQZYe1oQU1809QG1qqJWUG84gxVLKyqWBWyvDqU/gviz/tq?sheet=goods&tq=where%20B%3D'A04'%20%20OR%20%20B%3D'A03'" type="text/javascript"> </script>
</head>
<body>
</body>
</html>
|
Цитата:
|
| Часовой пояс GMT +3, время: 11:57. |