Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Какая ошибка вывода в Json? (https://javascript.ru/forum/misc/72931-kakaya-oshibka-vyvoda-v-json.html)

spinastr 07.03.2018 14:11

Какая ошибка вывода в Json?
 
Вывожу данные статистики:

PHP

<?PHP
$i = parse_ini_string(file_get_contents('http://counter.yadro.ru/values?site=devaka.ru'));
file_put_contents('st.json',json_encode($i));
?>


JSON

{"LI_site":"devaka.ru","LI_month_hit":"109891","LI_month_vis":"49790","LI_week_hit":"26620","LI_week_vis":"14228","LI_day_hit":"5207","LI_day_vis":"3393","LI_today_hit":"335","LI_today_vis":"232","LI_online_hit":"11","LI_online_vis":"6"}



HTML

<div class="lives"></div>

<script>
$.getJSON(".s08.test-hf.su/st.json", function(data) {
 $('.lives').html(LI_site);
});
</script>




Подскажите что тут неверно? Почему не работает?

laimas 07.03.2018 14:27

Цитата:

Сообщение от spinastr
Почему не работает?

Потому, что нет такого на клиенте, есть data.LI_site.

file_put_contents('st.json',json_encode($i)); - это зачем?

$.getJSON должен обращаться к файлу сценария, который делает запрос к другому домену и сразу возвращает нужное:

<?
if($f = file_get_contents('http://counter.yadro.ru/values?site=devaka.ru')) {
    exit(json_encode(parse_ini_string($f)));
} else exit(json_encode(['error'=>'Text error.']));

spinastr 07.03.2018 14:32

laimas,

На самом сайте у меня нету PHP и нужно через json выводить со стороннего хостинга.
Добавил ваш код в php? а дальше что делать я в js и php не особо разбираюсь. Подскажите пожалуйста?

laimas 07.03.2018 14:33

Ничего не делать, изменить url запроса в $.getJSON.

spinastr 07.03.2018 14:38

laimas,

Подскажите как игде изменить в js или php

я написал так и неработает

<div class="lives"></div>
 
<script>
$.getJSON("http://h116641.s08.test-hf.su/st.php", function(data) {
$('.lives').html(data.LI_site);
});
</script>

laimas 07.03.2018 14:41

Если http://h116641.s08.test-hf.su/st.php, это файл выполняющий указанный код, то все должно работать. Ошибки могут быть только на клиенте.

PS. Конечно, если это запрашивает также домен h116641.s08.test-hf.su. В противном случае нужно разрешение, перечитывайте тему о курсах валют, так об этом говорилось - о заголовках, которые должен отдавать домен h116641.s08.test-hf.su.

spinastr 07.03.2018 14:42

laimas,
У меня сайт на юкоз там нету php, как можно перевести php в json и оттуда через js вывести данные в div?

laimas 07.03.2018 14:45

Читайте постскриптум выше.

spinastr 07.03.2018 14:47

laimas,

В этом домене на эти файлы ещё не ставил ограничения как с курсом

Я всю ночь читал и уже забыл, подскажите? Как вывести?

Почему я делал через json?
Цитата:

Сообщение от laimas
file_put_contents('st.json',json_encode($i)); - это зачем?

Вы так сказали?

Про заголовки, есть такой фаил


index.php


<?php
header('Access-Control-Allow-Origin: Мой сайт');
header('Vary: Origin');
header('Access-Control-Allow-Methods: GET');
header('Content-type: application/json; charset=utf-8');
exit(file_get_contents('current/current.json'));
?>

laimas 07.03.2018 15:08

Если домен h116641.s08.test-hf.su отдает и курсы валют и прочую информацию, то разрешение для домена ее запрашивающую нужно поместить в файл .htaccess, который размещен в корне документов на домене h116641.s08.test-hf.su. Эти строки нужно поместить в этот файл:

Header add Access-Control-Allow-Origin "домен вашего сайта"
Header add Vary "Origin"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "GET, POST"

Из index.php нужно удалить передачу этих заголовков, то есть в нем должно быть:

<?php
header('Content-type: application/json; charset=utf-8');
exit(file_get_contents('current/current.json'));
?>


Передавать заголовок header('Content-type: application/json; charset=utf-8'); должен и файл отдающий другую информацию в формате JSON.

spinastr 07.03.2018 15:16

<?php
header('Content-type: application/json; charset=utf-8');
exit(file_get_contents('current/current.json'));
?>


Программист из темы курса не велел там ничего удалять.

В файл .htaccess лежит в каталоге отдельном, содержит (Deny from all)
в корне хоста создал два файла st.php и st.json

В корне есть и файл index.php - я так понял он не разрешает вывести данные? Там нужно стереть запрет?

А можно в него что то дописать что бы он разрешал вывод статистики?

И уменя нету php нужно через json

spinastr 07.03.2018 15:22

Мне нужно вывести хиты на сайт, вот тут статья

это пример

вот оттуда нужно вывести число может есть более простые способы?
LI_site = 'mexboy.ru';
LI_month_hit = 5313;
LI_month_vis = 3886;
LI_week_hit = 1096;
LI_week_vis = 885;
LI_day_hit = 172;
LI_day_vis = 144;
LI_today_hit = 89;
LI_today_vis = 74;
LI_online_hit = 4;
LI_online_vis = 4;

laimas 07.03.2018 15:23

Цитата:

Сообщение от spinastr
Программист из темы курса не велел там ничего удалять.

Передайте привет этому программисту и пусть он сам изучит матчасть, прежде чем учить других.

Цитата:

Сообщение от spinastr
В файл .htaccess лежит в каталоге отдельном, содержит (Deny from all)

Я вам разве об этом файле говорю? Положите в корень документов (туда же, где и Index.php) файл .htaccess и поместите в него строки указанные.

Цитата:

Сообщение от spinastr
И уменя нету php нужно через json

Не мутите воду, чтобы не плодить еще темы длины невероятной - у вас все РНР сервисные запросы выполняет домен h116641.s08.test-hf.su и отдает в требуемом формате для вашего сайта. Чтобы не писать по много раз разрешения в каждом таком сервисе и нужно передать эту операцию Apache через .htaccess.

spinastr 07.03.2018 15:55

laimas,

Извините я запутался!

Скажите мне всё по порядку:

1. Какие файлы создать?
2. Какие коды в них должны быть?
3. JS который выводит данные на мой сайт?

Помогите, я так написал чтобы больше не было путаницы.

__________________________________________________ ____

В корне хоста создал папку: st
В папке два файла st.php и st.json

Содержимое:

st.php

<?
if($f = file_get_contents('http://counter.yadro.ru/values?site=devaka.ru')) {
    exit(json_encode(parse_ini_string($f)));
} else exit(json_encode(['error'=>'Text error.']));
?>


st.json

пусто

И js на моём сайте:

<div class="lives"></div>
 
<script>
$.getJSON("http://h116641.s08.test-hf.su/st/st.php", function(data) {
$('.lives').html(data.LI_site);
});
</script>


Что по порядку нужно куда дописать и сделать?

spinastr 07.03.2018 16:17

Почему не работает?

Тут получается json http://h116641.s08.test-hf.su/st/st.php

У меня на сайте скрипт php не работает.


laimas 07.03.2018 16:20

Цитата:

Сообщение от spinastr
В папке два файла st.php и st.json

Учитесь рассуждать, не важно программирование это или попытка заменить перегоревшую лампочку.

Первая потребность иметь домен с РНР поддержкой возникла из-за необходимости получения курса валют. А так как курс валют изменяется раз в сутки, то и запрос курса в ЦБ делается один раз. Но ваш сайт может запрашивать этот курс многократно. А значит и возникает потребность хранения полученных курсов на домене h116641.s08.test-hf.su, что и делается их записью в файл в формате json.

Теперь потребовалось получение какой-то статистки. Но эти данные могут изменяться с течением времени. А это означает, что их запрос на домене counter.yadro.ru предполагает сразу возврат их вашему сайту. Отсюда вопрос - нужно ли сохранять их на домене h116641.s08.test-hf.su?

spinastr 07.03.2018 16:31

Цитата:

Сообщение от laimas
нужно ли сохранять их на домене h116641.s08.test-hf.su?

Да я тоже задавался таким вопросом, данные готовые. Но я их не мог взять с домена, так как скрипт вывода json не брал данные на прямую по ссылке примера http://counter.yadro.ru/values?site=mexboy.ru

Я решил сделать также как в курсе валют, нашёл php вставил перевёл в json записал в json. Скриптом старался вытянуть но не получается.

Так то да данные готовые: Нужно просто число хитов. Это число хотел вставить в панель или вверх сайта. Это нужно что бы пользователи видели значимость сайта. Что бы они видели сколько раз на него зашли в сутки. так как сайт небольшого города и многие считают сайт не популярным. Все привыкли к соц сетям где написано количество подписчиков. Вот я и решил вывести количество общих просмотров за день. На сайте у меня чисто (целевая) местная аудитория, раскрутками посещаемости не занимаюсь.

Можно как то вывести без хостинга? Сразу в блок? По ссылке всё само обновляется.

laimas 07.03.2018 16:47

Цитата:

Сообщение от spinastr
Нужно просто число хитов.

Если из всего нужно только число хитов, то ни к чему и кодировать данные в JSON и получать их методом getJSON.

Домен h116641.s08.test-hf.su обслуживает только ваш сайт и для этого передает соответствующие заголовки. Пока вы не перенесете их из индексного файла в .htaccess никакой статистки вы не получите.

Никаких st.json не нужно, а файл st.php должен получать и отдавать клиенту только значение хитов (каких именно не знаю, там и за месяц, и за неделю, и за сутки...):

<?php
if($f = file_get_contents('http://counter.yadro.ru/values?site=devaka.ru')) {
    exit(parse_ini_string($f)['LI_month_hit']); //это хиты за месяц, указывайте сами какие нужны
}
?>


Клиент получает:

$(".lives").load("http://h116641.s08.test-hf.su/st/st.php");

spinastr 07.03.2018 16:53

laimas,

Выше немного не понял!

Получилось так

http://h116641.s08.test-hf.su/st/st.php

Это у меня на сайте

<div class="lives"></div>
<script>
$(".lives").load("http://h116641.s08.test-hf.su/st/st.php");
</script>


Но говорю ещё раз, у меня не будет работать скрипт с*.php

Данные не выводятся

spinastr 07.03.2018 17:00

Цитата:

Сообщение от laimas
Домен h116641.s08.test-hf.su обслуживает только ваш сайт и для этого передает соответствующие заголовки. Пока вы не перенесете их из индексного файла в .htaccess никакой статистки вы не получите.

Куда мне нужно переместить этот файл st.php ?

laimas 07.03.2018 17:02

Цитата:

Сообщение от spinastr
Но говорю ещё раз, у меня не будет работать скрипт с*.php

Сколько раз можно говорить о заголовках?

Сделайте то, о чем говорилось выше и все будет работать.

Все, больше об этом сказать нечего.

spinastr 07.03.2018 17:09

laimas,

Цитата:

Сообщение от laimas
Сделайте то, о чем говорилось выше и все будет работать.

Скажите что куда добавить и дописать? Что выше написано я не понимаю говорю прямо. Лучше покажите словом?

laimas 07.03.2018 17:14

Цитата:

Сообщение от spinastr
Скажите что куда добавить и дописать?

Здесь https://javascript.ru/forum/480021-post10.html и здесь https://javascript.ru/forum/480034-post18.html все написано, читайте и делайте.

spinastr 07.03.2018 17:36

laimas,

Я верно понимаю?

в файле htaccess который находится в каталоге с скриптом курса валют

стереть Deny from all и написать:

Header add Access-Control-Allow-Origin "домен вашего сайта"
Header add Vary "Origin"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "GET, POST"


в файле index.php

всё сереть и написать так:

<?php
header('Content-type: application/json; charset=utf-8');
exit(file_get_contents('current/current.json'));
?>


1. Всё верно?
2. Это не повлияет на работу скрипта курса валют?


Сейчас в index.php написано так

<?php
header('Access-Control-Allow-Origin: сайт.ru');
header('Vary: Origin');
header('Access-Control-Allow-Methods: GET');
header('Content-type: application/json; charset=utf-8');
exit(file_get_contents('current/current.json'));
?>

laimas 07.03.2018 17:43

Цитата:

Сообщение от spinastr
Я верно понимаю?

в файле htaccess который находится в каталоге с скриптом курса валют

Я уже задавал вопрос - я разве об этом файле говорил? Я же черным по белому писал "нужно поместить в файл .htaccess, который размещен в корне документов"

Оставьте в покое .htaccess в папке current, его задача закрыть эту папку от прямого доступа. Неужели не понятно из сказанного, что нужно создать в корне документов новый файл .htaccess, в который поместить указанное? Ну ладно вы не знаете языка и изучать не хотите, но читать то вы можете. А надо еще и внимательно читать.

spinastr 07.03.2018 17:48

laimas,

Я понял в папке st где находится st.php создать .htaccess с вашим содержимым который написано выше?

И всё будет работать?

Верно?

laimas 07.03.2018 17:51

Цитата:

Сообщение от spinastr
Я понял в папке st где находится st.php создать .htaccess с вашим содержимым который написано выше?

В корне документов мать его ити, сколько еще можно повторять эту мантру?! Что такое корень документов на сайте? И об этом ранее было рассказано.

spinastr 07.03.2018 17:54

В корне документа создать два файла st.php и .htaccess ?

laimas 07.03.2018 17:59

Цитата:

Сообщение от spinastr
В корне документа создать два файла st.php и .htaccess ?

Файл .htaccess должен быть обязательно в корне документов, так как он будет давать разрешения для всех запросов. А st.php размещайте где угодно.

spinastr 07.03.2018 18:05

Всё работает, поставил домен своего сайта и не работает почему то?

spinastr 07.03.2018 18:11

laimas,
Спасибо разобрался благодаря вашей помощи! Всё работает.

Скажите эти данные не нужно добавлять в крон? Всё автоматически обновляется?

spinastr 07.03.2018 18:20

Если я хочу вывести несколько данных?

exit(parse_ini_string($f)['LI_today_hit, LI_today_hit']);


Нужно так делать? Через запятую LI_today_hit, LI_today_hit

laimas 07.03.2018 18:29

Цитата:

Сообщение от spinastr
Скажите эти данные не нужно добавлять в крон?

Зачем?

Цитата:

Сообщение от spinastr
Если я хочу вывести несколько данных?

Значит нужно передавать как json. У вас семь пятниц на неделе, то разбираетесь с json, то заявляете что нужен только хит, вам показывают как в этом случае поступить, затем опять запросы.

Получайте как раньше, и запрашивайте методом getJSON.

spinastr 07.03.2018 19:04

laimas,

У меня пропал курс доллара?

Почему?

Скрипты на сайте стоят так

<script> 
//именно такое и получит Ajax 
$.getJSON("http://h116641.s08.test-hf.su/", function(data) {
 $.each(data, function(k, o) {
 $.each(o, function(a, r) {
 $('.' + k + '.' + a).html(a == 'date' ? r : {
 'USD': '$',
 'EUR': '€'
 }[a] + ' ' + r.value.toFixed(2) + ' <b class=' + ['', 'down', 'up'][r.rate] + '>' + ['', '▼', '▲'][r.rate] + '</b>').attr('title', function() {
 return $(this).hasClass('title') ? data[k].date : ''
 })
 })
 });
});
</script>
<!-- /курс доллара-->
<!-- Количество хитов--> 
<script>
    $(".lives").load("http://h116641.s08.test-hf.su/st.php");
</script>
<!-- /Количество хитов-->


если это стереть то курс появляется

Header add Access-Control-Allow-Origin "сайт.ru"
Header add Vary "Origin"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "GET, POST"


может всё перенести в отдельный каталог, скрипт хитов?

spinastr 07.03.2018 19:30

Перенёс всё в другой каталог не работает, что делать?

spinastr 08.03.2018 01:27

дописал в файл строки st.php и удалил .htaccess, в корне

<?php
header('Access-Control-Allow-Origin: http://мой.ru');
header('Vary: Origin');
header('Access-Control-Allow-Methods: GET');
header('Content-type: application/json; charset=utf-8');
if($f = file_get_contents('http://counter.yadro.ru/values?site=мой.ru')) {
   exit(parse_ini_string($f)['LI_today_hit']); //это хиты за месяц, указывайте сами какие нужны
}


Часовой пояс GMT +3, время: 20:32.