Как забрать данные из внешнего 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, время: 12:04. |