Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.05.2020, 21:16
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Как забрать данные из внешнего 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>


почему на мою функцию с точками ругается? нужно что-то еще до этого создать?

Последний раз редактировалось sovsem-nub, 05.05.2020 в 21:29.
Ответить с цитированием
  #2 (permalink)  
Старый 06.05.2020, 01:47
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Даже если имя функции будет содержать точку, присланный код не запустится, поскольку в глобальном объекте 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>
Ответить с цитированием
  #3 (permalink)  
Старый 06.05.2020, 03:05
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

еще вариант
<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>
Ответить с цитированием
  #4 (permalink)  
Старый 06.05.2020, 09:53
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Спасибо большое. А можно сделать то же самое без 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."
Ответить с цитированием
  #5 (permalink)  
Старый 06.05.2020, 10:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от sovsem-nub
как создать в "объекте google должен быть visualization в котором Query в котором метод setResponse."
строка 9 в коде от Malleys,
Сообщение от sovsem-nub
А можно сделать то же самое без fetch ?
можно с fetch через сервер https://cors-everywhere.glitch.me/https://docs.... (вариант от Malleys)
Ответить с цитированием
  #6 (permalink)  
Старый 06.05.2020, 11:14
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Сообщение от рони Посмотреть сообщение
строка 9 в коде от Malleys,

можно с fetch через сервер https://cors-everywhere.glitch.me/https://docs.... (вариант от Malleys)
9-ую строку вставлял. но все равно google is not defined . мне нужно понять. Если есть точки, то простой JSONP невозможен?

Спрашиваю, потому что у гугла есть АПИ, которое собирает данные безо всякого 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>

Последний раз редактировалось sovsem-nub, 06.05.2020 в 11:20.
Ответить с цитированием
  #7 (permalink)  
Старый 06.05.2020, 11:33
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

<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

Последний раз редактировалось Vlasenko Fedor, 06.05.2020 в 11:36.
Ответить с цитированием
  #8 (permalink)  
Старый 06.05.2020, 11:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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>
Ответить с цитированием
  #9 (permalink)  
Старый 06.05.2020, 13:35
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Сообщение от рони Посмотреть сообщение
sovsem-nub,
Офигеть как просто. Спасибо большое.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как через JS задать ширину родителя как у ребенка? ethereal Элементы интерфейса 6 13.01.2020 11:05
initComponent: Как получить данные родителя и как получить store для вызова load()? Пролетарий ExtJS 76 04.07.2015 09:22
Как передать данные в другую панель из выбранной строки таблицы. layout: 'card'. Пролетарий ExtJS 5 03.06.2015 22:53
JS классы - как объединить функции в класс olga153b Events/DOM/Window 3 01.11.2011 14:13
как с помощью js отправить данные??? systemiv Общие вопросы Javascript 28 02.10.2011 18:16