<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JavaScript: var, object ( Отображение информации JSON без query )]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13402&amp;type=atom" />
	<updated>2020-03-02T09:13:23Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=13402</id>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138204#p138204" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ru&quot; xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
	&lt;head&gt;
		&lt;meta charset=&quot;utf-8&quot; /&gt;
		&lt;title&gt;Get time&lt;/title&gt;
		&lt;script&gt;
			var URL = &quot;http://time.jsontest.com/&quot;;
			async function get_time() {
				body = document.body;
				body.innerHTML = &quot;load page...wait&quot;;
				try {
					response = await fetch(URL);
					if (!response.ok) {
						throw new Error(&quot;Not OK&quot;);
					}
					resp = await response.text();
					json = JSON.parse(resp);
					body.innerHTML = &quot;date: &quot; + json.date + &quot;&lt;br&gt;&quot;
					body.innerHTML += &quot;milliseconds_since_epoch: &quot; + json.milliseconds_since_epoch + &quot;&lt;br&gt;&quot;;
					body.innerHTML += &quot;time: &quot; + json.time + &quot;&lt;br&gt;&quot;;
				} catch (error) {
					console.log(&quot;Error request: &quot;, error.message);
				}
			}
		&lt;/script&gt;
	&lt;/head&gt;
	&lt;body onload=&quot;get_time()&quot;&gt;
	&lt;/body&gt;
&lt;/html&gt;
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[DnsIs]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26282</uri>
			</author>
			<updated>2020-03-02T09:13:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138204#p138204</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=137835#p137835" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>powercat пишет:</cite><blockquote><p> Есть сайт с которого нужно вытянуть UNIX время. http://time.jsontest.com/</p></blockquote></div><p>Под Chrome, FF, Edge<br /></p><div class="codebox"><pre><code>
(async ()=&gt;
{
    let resp = await fetch(`http://time.jsontest.com/`);
    let data = await resp.json();
    console.log(data.milliseconds_since_epoch)
})()
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2020-02-15T14:45:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=137835#p137835</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123757#p123757" />
			<content type="html"><![CDATA[<p><strong>svoboden</strong>, благодарю за уточнение. Действительно, не учёл момент, что Google Chrome делает автоматическое преобразование данных в объект. Дабы не было ошибки, достаточно убрать из кода строку:<br /></p><div class="codebox"><pre><code>
xhr.responseType = &#039;json&#039;;
</code></pre></div><p>При этом автоматического преобразования данных не будет происходить.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2018-02-17T17:04:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123757#p123757</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123756#p123756" />
			<content type="html"><![CDATA[<p>Google Chrome. А работает такой вариант: <br />curdate = data.milliseconds_since_epoch или пример автора вопроса.</p>]]></content>
			<author>
				<name><![CDATA[svoboden]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34280</uri>
			</author>
			<updated>2018-02-17T16:55:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123756#p123756</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123755#p123755" />
			<content type="html"><![CDATA[<p><strong>svoboden</strong>, <br /></p><div class="quotebox"><blockquote><p>curdate = JSON.parse(data).milliseconds_since_epoch; не работает.</p></blockquote></div><p>А вы в каком браузере проверяете ? )</p><p>Я как раз по этой причине, сразу под кодом написал: <br /></p><div class="quotebox"><blockquote><p>Это не очень хорошее решение, так как опять же не универсальное для браузеров, но для теста нам вполне подойдёт.</p></blockquote></div><p>Для IE11 работает без проблем. Так как в нём JSON объект уже встроен. Насколько мне известно, нативная поддержка JSON присутствует в:<br /><strong><br />IE8+<br />Firefox 3.1+<br />Safari 4.0.3+<br />Opera 10.5+<br /></strong></p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2018-02-17T16:52:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123755#p123755</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123754#p123754" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong>, согласен насчет задержки. Но ваша строка curdate = JSON.parse(data).milliseconds_since_epoch; не работает.</p>]]></content>
			<author>
				<name><![CDATA[svoboden]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34280</uri>
			</author>
			<updated>2018-02-17T16:52:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123754#p123754</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123751#p123751" />
			<content type="html"><![CDATA[<p>Да, только что проверял на примере автора вопроса. Действительно, ответ может прийти позже.</p>]]></content>
			<author>
				<name><![CDATA[svoboden]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34280</uri>
			</author>
			<updated>2018-02-17T14:45:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123751#p123751</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123750#p123750" />
			<content type="html"><![CDATA[<p><strong>svoboden</strong>, </p><div class="quotebox"><blockquote><p>Я не совсем понимаю ваш пример, но таймаут не дожидается ответа сервера, он ждет выполнения функции:</p></blockquote></div><p>Печально. Как я уже написал выше, предложенный Вами таймаут, может вызывать ошибку, в случае если событие <strong>onload</strong> сработает позже него, либо таймаут может продолжать ожидание не смотря на то что данные уже пришли, если событие произошло ранее. Не хочу повторно расписывать то, что уже писал выше. Пожалуйста, изучите более детально пример из предыдущего сообщения. Я постарался максимально подробно и понятно пояснить чем плох таймаут в этом случае. И прошу, не дублируйте ошибку со строкой:<br /></p><div class="codebox"><pre><code>
curdate = `${data.milliseconds_since_epoch}`;
</code></pre></div><p>Ведь уже очевидно, что это приводит к неработоспособности кода.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2018-02-17T14:26:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123750#p123750</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123749#p123749" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>так как сначала срабатывает таймаут, выполняя функцию с выводом значения переменной, не дождавшись ответа сервера и уже потом появляется сообщение о завершении выполнения запроса.</p></blockquote></div><p>Я не совсем понимаю ваш пример, но таймаут не дожидается ответа сервера, он ждет выполнения функции:<br /></p><div class="codebox"><pre><code>alert(1);
setTimeout(alert, 3000, 2);
alert(3);</code></pre></div><p>Или более наглядно:<br /></p><div class="codebox"><pre><code>function pause(delay) {
  var startTime = Date.now();

  while (Date.now() - startTime &lt; delay);
}

var getJSON = function(url, callback) {

    var xhr = new XMLHttpRequest();
    xhr.open(&#039;GET&#039;, url, true);
    xhr.responseType = &#039;json&#039;;
    xhr.onload = function() {
        var status = xhr.status;
        if (status == 200) {
            callback(null, xhr.response);
        } else {
            callback(status);
        }
    };
    xhr.send();
};
getcurdate = getJSON(&#039;http://time.jsontest.com&#039;,
 function(err, data) {
    if (err != null) {
        console.error(err);
    } else {
   curdate = `${data.milliseconds_since_epoch}`;
pause(3000);
    }
});

setTimeout(function () {
alert(curdate);
}, 1000);</code></pre></div>]]></content>
			<author>
				<name><![CDATA[svoboden]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34280</uri>
			</author>
			<updated>2018-02-17T13:34:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123749#p123749</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123554#p123554" />
			<content type="html"><![CDATA[<p><strong>powercat</strong>, прекрасно. Тогда поясните, пожалуйста 3 момента:<br />1) предложенные решения кода Вас устроили или что-то ещё требуется ?<br />2) Если не секрет, почему у Вас в заголовке написано, &quot;<span class="bbu">Отображение информации JSON без query</span>&quot;, а в коде строка, хоть и с ошибками, но явно намекающая на желание использовать jQuery, судя по символу &quot;$&quot;:<br /></p><div class="codebox"><pre><code>
curdate = `${data.milliseconds_since_epoch}`
</code></pre></div><p>Или имеется в виду нечто иное ?<br />3) Судя по коду, вы хотите создать функцию для запроса данных с <strong>callback</strong>-ом. Если так, то опять же зачем изобретать &quot;велосипед&quot;, если в jQuery это всё уже прекрасно решено. Причём решено кроссбраузерно, гибко, с миниморумом кода и в самых разных вариациях (события, промисы, коллбэки) ?</p><p>P.S Возможно я чего-то не учитываю ? При написании расширения для хрома есть ограничения ?</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2018-02-03T06:59:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123554#p123554</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123552#p123552" />
			<content type="html"><![CDATA[<p>Код нужен для расширения. Браузер только Google Chrome. Нужно вытянуть UNIX время и объявить переменну вне функции, чтобы была возможность использовать переменную в других местах.</p>]]></content>
			<author>
				<name><![CDATA[powercat]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=37884</uri>
			</author>
			<updated>2018-02-03T01:48:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123552#p123552</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123539#p123539" />
			<content type="html"><![CDATA[<p><strong>svoboden</strong>, </p><p>1) </p><div class="quotebox"><blockquote><p>Тс нужно вытянуть UNIX время из страницы, а про готовое решение для страницы, я что-то не вижу, где бы он такое писал.<br />....<br />Я не знаю, для каких целей тс нужно выполнить код в консоли.</p></blockquote></div><p>Хорошо, про готовое решение соглашусь - об этом не было упомянуто, но не было и упомянуто о том, чтобы выполнять код в консоли. Вызовы типа:<br /></p><div class="codebox"><pre><code>console.error(err)</code></pre></div><p>на мой взгляд, не говорят о том, что весь код будет исполняться в консоли, а лишь о том, что тс пытался отлаживать код выводя сообщения в консоль. </p><p>Второй момент. Выполнять <span class="bbu">функцию</span> в консоли предложили Вы:<br /></p><div class="quotebox"><blockquote><p>Там я имел в виду, что через консоль нужно сначала выполнить функцию, а потом выполнить следующий код.</p></blockquote></div><p>Так как функций <span class="bbu">несколько</span>, о чём я уже писал, я решил уточнить какую именно Вы предлагаете выполнить в консоли и для каких целей, так как мне не совсем была понятна цель этого действия и до сих пор не ясна.</p><p>2) <br /></p><div class="quotebox"><blockquote><p>Насчет запуска из консоли, я сделал такой вывод, исходя из этой строчки: &quot;console.error(err);&quot; в примере кода.</p></blockquote></div><p>Об это я уже написал в первом пункте. </p><p>3) </p><div class="quotebox"><blockquote><p>И с чего вы взяли, что выше функция может долго ждать ответ ?</p></blockquote></div><p>С радостью поясню. Так как запрос уходит через web, то время ответа сервера может быть разным. Для примера я решил внести небольшие изменения, в приведённый Вами код.<br />а) Заменил url, на который происходит обращение на <span class="bbu">http://my-server.ml/test/</span>. Серверный скрипт по этому адресу принимает параметр <strong>delay</strong> (задержка) для выполнения задержки на n миллисекунд. Т.е симулирует задержку, которая может произойти в результате отдачи объёмного контента, либо в результате нестабильного интернет соединения, либо в виду прочих причин.<br />б) в событии onload добавил <br /></p><div class="codebox"><pre><code>alert(&#039;request complete&#039;);</code></pre></div><p>, чтобы мы могли узнать когда пришёл ответ от сервера.<br />в) Исправил место, где в коде происходила ошибка.<br /></p><div class="codebox"><pre><code>
curdate = `${data.milliseconds_since_epoch}`;
</code></pre></div><p>заменил на<br /></p><div class="codebox"><pre><code>
curdate = JSON.parse(data).milliseconds_since_epoch;
</code></pre></div><p>Это не очень хорошее решение, так как опять же не универсальное для браузеров, но для теста нам вполне подойдёт.</p><p>Итак код:</p><div class="codebox"><pre><code>
&lt;!doctype html&gt;
&lt;html lang=&quot;ru&quot;&gt;
	&lt;head&gt;
		&lt;meta charset=&quot;utf-8&quot;&gt;
		&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, shrink-to-fit=no&quot;&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
			var getJSON = function(url, callback) {

				var xhr = new XMLHttpRequest();
				xhr.open(&#039;GET&#039;, url, true);
				xhr.responseType = &#039;json&#039;;
				xhr.onload = function() {
					alert(&#039;request complete&#039;);
					var status = xhr.status;
					if (status == 200) {
						callback(null, xhr.response);
					} else {
						callback(status);
					}
				};
				xhr.send();
			};
			getcurdate = getJSON(&#039;http://my-server.ml/test/&#039;,
			 function(err, data) {
				if (err != null) {
					console.error(err);
				} else {
					curdate = JSON.parse(data).milliseconds_since_epoch;
				}
			});

			setTimeout(function () {
				alert(curdate);
			}, 1000);
			
		&lt;/script&gt;
	&lt;/head&gt;
&lt;/html&gt;
</code></pre></div><p>Можете провести у себя тест:<br />1) При запросе без указания задержки сначала получаем сообщение &quot;request complete&quot; и только потом, по истечении таймаута, уже сообщение с данными.</p><p>2) Если же мы заменяем url на <span class="bbu">http://my-server.ml/test/?delay=3000</span>, то в консоли происходит ошибка:<br /></p><div class="quotebox"><blockquote><p>&quot;curdate&quot; не определено</p></blockquote></div><p>так как сначала срабатывает таймаут, выполняя функцию с выводом значения переменной, не дождавшись ответа сервера и уже потом появляется сообщение о завершении выполнения запроса.</p><p>Именно по этой причине, я указал Вам на ненадёжность использования таймаута в коде.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2018-02-02T09:21:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123539#p123539</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123534#p123534" />
			<content type="html"><![CDATA[<p>1) Тс нужно вытянуть UNIX время из страницы, а про готовое решение для страницы, я что-то не вижу, где бы он такое писал.<br /></p><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Какую из них вы предлагаете предварительно выполнить в консоли и для каких целей ?</p></blockquote></div><p>Я не знаю, для каких целей тс нужно выполнить код в консоли.<br />2) Насчет запуска из консоли, я сделал такой вывод, исходя из этой строчки: &quot;console.error(err);&quot; в примере кода.<br />3) И с чего вы взяли, что выше функция может долго ждать ответ?<br />Я, например, тестировал alert внутри 3-ой функции после else, и у меня всегда работало.</p>]]></content>
			<author>
				<name><![CDATA[svoboden]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34280</uri>
			</author>
			<updated>2018-02-01T21:27:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123534#p123534</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123522#p123522" />
			<content type="html"><![CDATA[<p><strong>svoboden</strong>, к сожалению, не совсем Вас понял. Если можно, поясните, пожалуйста, подробнее.<br />1) В том коде я вижу 3 функции. Одна &quot;getJSON&quot;, вторая безымянная в setTimeout, третья вложена в вызов getJSON. Какую из них вы предлагаете предварительно выполнить в консоли и для каких целей ?<br />2) Тс про консоль вроде ничего не говорил ? Из чего я сделал вывод, что ему нужно готовое решение для страницы ? Ошибаюсь ?</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2018-02-01T07:29:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123522#p123522</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JavaScript: var, object ( Отображение информации JSON без query )]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123507#p123507" />
			<content type="html"><![CDATA[<p>Там я имел в виду, что через консоль нужно сначала выполнить функцию, а потом выполнить следующий код.</p>]]></content>
			<author>
				<name><![CDATA[svoboden]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34280</uri>
			</author>
			<updated>2018-01-31T16:41:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123507#p123507</id>
		</entry>
</feed>
