|
У Оbject стрелка, щелкаем, раскрываем, смотрим... Учитесь, а ошибки от VK, это нехорошо
|
laimas,
Курс не обновился {"current":{"date":"11.2.2018","value":58.17,"rate ":1},"previous":{"date":"10.2.2018","value":57.67, "rate":1}} Я устал что то смотреть, значит скрипт не полностью работает |
|
вот тут указаны дата и курс в ручную за сегодня и завтра
var data = {"current":{"date":"11.2.2018","value":58.17,"rate":1},"previous":{"date":"10.2.2018","value":57.67,"rate":1}}; как получить эти данные из файла и применить к данному решению |
Залил на сервер тестовую страницу
там тоже ошибка <html lang="ru"> <head> <meta charset="utf-8" /> <title>Документ без названия</title> <script type="text/javascript" src="http://forum.ucoz.ru/.s/src/jquery-1.7.2.js"></script> </head> <body> <style> .up {color: #0f0; /*зеленый цвет*/} .down {color: #f00;} </style> <div class="ratehead"> <span class="current"></span> </div> <div class="ratebox"> <span class="current"></span> <span class="previous"></span> </div> <script> //именно такое и получит Ajax $.getJSON("домен", function(data) { //и вот тут данные этого объекта помещаются на свои места $.each(data, function(k, o) { $('.'+k).html("$ " + o.value + ' <b class=' + ['down','up'][o.rate] +'>' + ['▼','▲'][o.rate] +'</b>').attr("title", o.date) }) }); </script> </body> </html> |
Посмотрел урок на ютубе про $.getJSON там из фейсбука выводили данные. Вот сам написал и работает, но стрелок нету динамики и не могу вывести
<html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id="usd"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script type="text/javascript"> $.getJSON("домен", function(data) { $('#usd').html("$ " +data.current.value); }); </script> </body> </html> и работает, я немного понял. ![]() тут как я это понимаю (методом народного тыка) https://pp.userapi.com/c840126/v8401...bplUOIv5Dg.jpg |
Про стрелки. В json есть значения 1 и 0, 1 курс поднялся, 0 курс опустился. То есть php уже все вывел. Теперь в js осталось вывести, если 1 то зелёная стрелка вверх, если ноль то красная стрелка в низ.
Как это сделать? |
Цитата:
Но в самом файле курса есть ошибка {"current":{"date":"11.2.2018","value":58.17,"rate ":1},"previous":{"date":"10.2.2018","value":57.67, "rate":1}} У объекта запрашивается свойство rate, и у "previous" такое есть, а вот у "current" такого свойства нет, так как rate + пробел, это уже не rate. И эта ошибка может возникнуть только по вашей вине/невнимательности. Цитата:
|
laimas,
Не понел? Какая моя ошибка? Json формирует php. Значит ошибка в php скрипта он все записывает, что исправить в php скрипте? На сайте ЦБ курс тоже не обнавился. |
Там пробел "rate " между буквой и ковычкой, получается где то в php скрипта записывается с пробелом? Это где именно?
|
Цитата:
'rate' => intval($usd_curr > $usd_prev) в имени ключа у вас значит также содержит пробел 'rate ' => intval($usd_curr > $usd_prev) В этом случае так оно и в json будет упаковано, а вы вместо того чтобы смотреть и проверять кипишь подымаете, да и все у вас хрень, и скрипты вам дают хреновые.... А вам приводя примеры дают нормальный json без ошибок. И уже скоро 300-сотый юбилей у этой темы будет, а воз и ныне там. |
laimas,
Спасибо вам очень ценю помощь, сейчас подставлю. НО, кто дал мне этот PHP? Я его скопировал и вставил и если в этом была ошибка, ТО точно не моя! |
Цитата:
Цитата:
file_put_contents('current.json', json_encode( array( 'current' => array( 'date' => date('j.n.Y'), 'value' => $usd_curr, 'rate' => intval($usd_curr > $usd_prev) ), 'previous' => array( 'date' => date('j.n.Y', strtotime('-1 day')), 'value' => $usd_prev, 'rate' => intval($usd_prev > $last) ) )) ); Есть тут пробелы в ключах? |
laimas,
Нету извините я был не прав! Прошу прощения! ![]() Но у меня на хосте тоже нет пробела в ключе, что за ошибка тогда? |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <style> .ratebox > * { display: block; } .ratebox .up { color: #0f0; } .ratebox .down { color: #f00; } .ratehead { background-color: #0164C6; color: #fff; } .ratehead .up, .ratehead .down { color: #fff; } </style> <div class="ratehead"> <span class="current"></span> </div> <div class="ratebox"> <span class="current"></span> <span class="previous"></span> </div> <script> //именно такое и получит Ajax var data = {"current":{"date":"11.2.2018","value":58.17,"rate ":1},"previous":{"date":"10.2.2018","value":57.67,"rate":1}}; //и вот тут данные этого объекта помещаются на свои места $(".current,.previous").each(function() { var a = $(this), b = this.className, c = a.parent().hasClass('ratebox'); a.html((c ? '<b>'+data[b].date+'</b>' : '') + " <b>$ " + data[b].value + '</b> <b class=' + ['down','up'][data[b].rate] +'>' + ['▼','▲'][data[b].rate] +'</b>') .attr("title", !c ? data[b].date : "") }) </script> Знакома ситуация? Причину знаем? Вперед проверять все что реально у вас творится, я гадать не буду. |
laimas,
Я понял про пробел! https://pp.userapi.com/c824410/v8244...HrYGMYHDHg.jpg Я его не ставил, json записывает php. Но в PHP ключе нету пробела. Что это значит? Я на этом форуме не умею так запускать скрипты, что бы убрать пробел и попробовать так сделать! |
|
Цитата:
|
зато тут есть http://h116641.s08.test-hf.su/, в json.
Вы его руками правили вот отсюда он и может быть. |
laimas,
Что то я не понял? Зашёл на хост убрать пробел, а там его нет. Может ещё раз запустить php что бы он переписал данные в json. |
Цитата:
сейчас уберу пробел |
laimas,
Спасибо вам огромное! Теперь нужно дождаться 0:00 и посмотреть обновление. Куда написать благодарность? |
Цитата:
|
laimas,
Курс не обновляется, на сайте цб обновился и в документе xml тоже. С начало в кроне поставил ближайшее время и подождал курс не записался в json. Потом удалил из папки htaccess, запустил в ручную current.php. И курс остался прежним. В чём проблема где ошибка? Всё обновился, курса нету вот |
Права на запись проверьте.
|
У ЦБ курс на 13 число, а скрипт записал на 12.
Странно как это решить? {"current":{"date":"12.2.2018","value":0,"rate":0},"previous":{"date":"11.2.2018","value":58.17,"rate":1}} Люди на сайте увидят курс доллара 0. |
Цитата:
Ваш домен, это папка на жестком диске, и таких виртуальных доменов на нем может быть много. Cron выполняет задания в пределах файловой системы этого диска, и путь вида http/ это нечто. Что-то близко к действительному, это будет путь имя_домена(без www и тем более http)/имя_корневой_папки_докумен ов/current/current.php При этом и перед именем домена может быть указана папка, все зависит от конфигурации. Если путь некорректен, ничего и не обновится, и ошибок не будет, крон и интерпретатор из под командной строки запускаются и опциями отменяющими вывод сообщений. Ошибки планировщика можно просмотреть только в его логах. Вопросы по этой проблеме решаются только с техподдержкой. |
Цитата:
12 числа курс равен курсу 11 числа, 12 он станет новым только по окончанию торгов на валютной бирже. Скрипт запрашивает курс каждый день в 0 часов, при этом даты периода курса берутся не по текущей дате, а текущая минус 1 день, и текущая минус 3 дня. А в json даты проставляются как текущая и текущая минус 1 день. Вы запросили за текущий день курс, которого еще нет, поэтому и 0. |
laimas,
да всё я уверен! выше написано что файл с json перезаписался. Но там курс 0. и дата на сегодня. у цб дата на завтра, то есть курса на сегодня нет ссылка скрипт всё работает получается но не верно что то ещё |
Цитата:
|
Цитата:
|
то есть если в 0:00 каждый день запрашивать всё будет нормально? и 0 больше не будет?
|
Ну я же русским языком написал за какой период запрашивается курс. Сейчас 12, торги еще не закончены, курса нового на этот день еще нет. Для всех торгующих курс на сегодня, это курс 11 числа.
В 0:00 (можете не 00 минут сделать, а 5, дабы учесть погрешности во времени) часов (это будет 13 уже) будет запрошен курс за 10-12, в это время новый курс уже будет установлен. В json он будет записан по датой 13, а предыдущий под датой 12. |
Ясно , спасибо!
|
Сервер должен работать обзательно по московскому часовому поясу, любой часовой пояс восточнее Москвы будет приводить к такой ошибке.
|
laimas,
Всё верно? ![]() |
Мне откуда знать когда это происходило. Если эта дата/время соответствует московскому то да.
|
laimas,
да соответствует, можете подсказать тут? |
laimas,
Крон сработал и обновил в 0:05 по Московскому, одни нули {"current":{"date":"13.2.2018","value":0,"rate":0},"previous":{"date":"12.2.2018","value":0,"rate":0}} У ЦБ на 13 число курс отображается и нет нулей ссылка Что тут может быть не так? Всё посмотрел, крон точно проверил, обновил всё сам и вовремя. <? $dir = dirname(__FILE__); chdir($dir); libxml_use_internal_errors(); if($xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='.date('d/m/Y', strtotime('-3 day')).'&date_req2='.date('d/m/Y', strtotime('-1 day')).'&VAL_NM_RQ=R01235')) { $last = round((float)str_replace(',', '.', current($xml->Record[0]->Value)), 2); $usd_prev = round((float)str_replace(',', '.', current($xml->Record[1]->Value)), 2); $usd_curr = round((float)str_replace(',', '.', current($xml->Record[2]->Value)), 2); chmod($dir, 0777); file_put_contents('current.json', json_encode( array( 'current' => array( 'date' => date('j.n.Y'), 'value' => $usd_curr, 'rate' => intval($usd_curr > $usd_prev) ), 'previous' => array( 'date' => date('j.n.Y', strtotime('-1 day')), 'value' => $usd_prev, 'rate' => intval($usd_prev > $last) ) )) ); chmod($dir, 0700); } ?> |
Часовой пояс GMT +3, время: 06:35. |