Проблема, частично решена. Прежде всего, неправильно был настроен домен! Его нужно было настроить глубже в файловой системе.
При нажатии на "Добавить в корзину" на странице определённого товара появляется цифра напротив "В корзине", "Добавить в корзину" - исчезает. Что и требовалось!
Остаётся один момент, который, по-хорошему, решить бы. Когда обновляешь страницу, то в корзине без изменений, а вот "Добавить в корзину" снова появляется (зачем?) на странице.
Как сделать, чтобы "Добавить в корзину" снова не появлялось? То есть, заходишь на страницу определённого товара - нажимаешь "Добавить в корзину" - и "Добавить в корзину" исчезает - и больше не появляется.
Как это сделать в моём вышеприведённом коде?
Как писал выше, при нажатии на 12/ в консоли выводились данные файла index.php, который к данному сайту не имел никакого отношения. Сначала удалил этот файл, в консоли появилось, что файл idex.php не найден. То есть, скрипт упорно продолжал искать этот файл... несмотря на то, что его нет. Тогда в файле Apache_vhost изменил путь с DocumentRoot "C:/OSPanel/domains/test/www" на "C:/OSPanel/domains/test/www/myshop.local/www"
Теперь, при нажатии в консоли на 12/ на вкладке Network-Preview появляется контент главной страницы:
Но, проблема, описанная в начале темы, так и остаётся.
Делаю сайт по видеоуроку, но изначально, настроил домен не как у автора, не придав этому особого значения. Плюс к этому в одной директории расположил сразу несколько сайтов: по нескольку файлов index.php, .htacces, и образовалось такая каша. Немного опасаюсь, что если сейчас этот сайт вынесу в отдельный каталог и домен, то нужно будет все ссылки снова переделывать.
Последние действия... Как я уже писал выше, папка с моим сайтом находится в директории C:\OSPanel\domains\test\www\myshop.local Так вот, файл index.php лежит в этой же директории C:\OSPanel\domains\test\www\index.php (ранее я об этом не писал). Файл index.php сейчас пуст, но эта пустота отображается, если нажать в Network 12/ на вкладке Network - Preview, как писалось выше. Если этот файл удалить, то в Network будет вот, что:
То есть, возможно дело не скриптах, а я, что-то напутал в путях. Но что?
Файл htaccess, который лежит в папке со всеми сайтами:
Options -Indexes ErrorDocument 404 /404.phpphp_value max_input_vars 10000<IfModule mod_php5.c> php_flag allow_call_time_pass_reference 1 php_flag session.use_trans_sid offdefault_charset="cp1251" #php_value display_errors 1 #php_value mbstring.func_overload 0 #php_value mbstring.internal_encoding UTF-8</IfModule><IfModule mod_rewrite.c> Options +FollowSymLinks RewriteEngine OnRewriteCond %{REQUEST_FILENAME} -f [OR]RewriteCond %{REQUEST_FILENAME} -l [OR]RewriteCond %{REQUEST_FILENAME} -dRewriteCond %{REQUEST_FILENAME} [\xC2-\xDF][\x80-\xBF] [OR]RewriteCond %{REQUEST_FILENAME} \xE0[\xA0-\xBF][\x80-\xBF] [OR]RewriteCond %{REQUEST_FILENAME} [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} [OR]RewriteCond %{REQUEST_FILENAME} \xED[\x80-\x9F][\x80-\xBF] [OR]RewriteCond %{REQUEST_FILENAME} \xF0[\x90-\xBF][\x80-\xBF]{2} [OR]RewriteCond %{REQUEST_FILENAME} [\xF1-\xF3][\x80-\xBF]{3} [OR]RewriteCond %{REQUEST_FILENAME} \xF4[\x80-\x8F][\x80-\xBF]{2}RewriteCond %{REQUEST_FILENAME} !/bitrix/virtual_file_system.php$RewriteRule ^(.*)$ /bitrix/virtual_file_system.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]</IfModule><IfModule mod_dir.c> DirectoryIndex index.php index.html</IfModule>
Тоже, файл htaccess, который лежит в сайте myshop.local, о котором и речь:
AddDefaultCharset utf-8 Options +FollowSymLinks Options -Indexes DirectoryIndex index.php RewriteEngine On RewriteBase / RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)/$ /?controller=$1&action=$2&id=$3&%{QUERY_STRING} [NS,L] RewriteRule ^([a-z]+)/([a-z]+)/$ /?controller=$1&action=$2&%{QUERY_STRING} [NS,L] RewriteRule ^([a-z]+)/([0-9]+)/$ /?controller=$1&id=$2&%{QUERY_STRING} [NS,L] RewriteRule ^([a-z]+)/$ /?controller=$1&%{QUERY_STRING} [NS,L] RewriteCond $1 !^(index\.php) RewriteCond %{REQUEST_URI} !\.(css│js│jpg│gif)$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Файл index.php, тоже который в сайте myshop.local:
<?phpsession_start(); // стартуем сессию// если в сессии нет массива корзины, то создаём егоif(! isset($_SESSION['cart'])) { $_SESSION['cart'] = array();}include_once '../config/config.php'; // Инициализация настроекinclude_once '../config/db.php'; // Инициализация базы данныхinclude_once '../library/mainFunctions.php'; // Основные функции// определяем с каким контроллером будем работать$controllerName = isset($_GET['controller']) ? ucfirst($_GET['controller']) : 'Index';// определяем с какой функцией будем работать$actionName = isset($_GET['action']) ? $_GET['action'] : 'index';// инициализируем переменную шаблонизатора количества элементов в корзине$smarty->assign('cartCntItems', count($_SESSION['cart']));loadPage($smarty, $controllerName, $actionName);
Не с путями ли, где-то, ошибка?
Смотрите. Обычно алгоритм поиска проблем с аяксом следующий1. Отключаете любое кэширование 2. оставляете только xhr и очищаете все логи дебагера, включаете все сообщения в консоли3. смотрите консоль нет ли каких ошибок с яваскриптом4. производите действие. Которое должно привести к аяксовому запросу.5. обращаетесь обратно к консоли. смотрите. Нет ли чего интересного (ошибок яваскрипта, сообщений от самого скрипта, выполнившего запрос)6. если есть - изучаете вопрос, штопаете. Если нет открываете вкладку сеть7. смотрите содержимое запроса. Что он передал на сервер (закладка "заголовки" и "запрс" ) и что он получил от сервера (закладка "ответ")7а. запрос должен быть вида (адрес: Вашсайт.ru/путь/до/скрипта/обработчика.php , + запрос постом, в котором указываются параметры товара ) на что сайт возвращает джейсон с параметрами корзины. 8. проверяете правильный ли адрес, на который уходят данные (бывает так, что дергается другой скрипт)9. Проверяете полноту отправляемых клиентом данных и подпись (если она используется)10. Проверяете ответ сервера.11. если сервер обрабатывает запрос, но не отправляет валидные данные, то скорее всего в отправляемый контент влезает какой-то мусор, от варнинга, до лишнего пробела12. это проверяется очень просто. при релоаде страницы товар должен быть в корзине. Это говорит о том. что запрос с клиента на сервер поступает, но в обратную сторону идет битый джейсон. 13. если запрос из п.9 валидный, а товар все-равно в корзине не появляется, значит где-то ошибка в пхп скрипте и надо копать его.
Спасибо, конечно, но похоже, приходят данные с другого сайта, который расположен в этой же директории (При нажатии на 12/ на вкладке Network - Preview, как я выше писал). Не пойму, почему так происходит?
При выполнении запроса со стороны сервера приходит ответ. На вкладке network смотри док, который приходит в ответ на запрос (тип xhr, видимо 12/ это он). Нажми на него и посмотри текст ответа. Вариантов громадное количество, посмотри что возвращается. А еще лучше измени js на
И смотри приходящие данные в консоли. Если это не json, в чем я уверен на 99%, то смотри что отдает сервер.
При нажатии на 12/ на вкладке Network - Preview появляется:
Это контент другого сайта (bitrix.mini), не имеющего отношения к тому, о котором создана тема! Каким-то образом данные другого сайта попадают в этот. Просто, я два разных сайта: myshop.local (о котором сейчас речь) и другой - bitrix.mini расположил в одной директории:
При нажатии на 12/ на вкладке Network - Headers появляется:
При нажатии на 12/ на вкладке Network - Cookies появляется:
При нажатии на 12/ на вкладке Network - Response появляется:
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"><head> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title></title> <link rel="shortcut icon" type="image/x-icon" href="/bitrix/templates/corp_services_blue/favicon.ico" /> <link rel="stylesheet" type="text/css" href="/bitrix/templates/corp_services_blue/common.css" /> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /><link href="/bitrix/js/main/core/css/core.min.css?15976054692854" type="text/css" rel="stylesheet" /><link href="/bitrix/cache/css/s1/corp_services_blue/template_2d981ea5d389ce6b149d1b93878b6536/template_2d981ea5d389ce6b149d1b93878b6536_v1.css?159786877310359" type="text/css" data-template-style="true" rel="stylesheet" /><script type="text/javascript">if(!window.BX)window.BX={};if(!window.BX.message)window.BX.message=function(mess){if(typeof mess=='object') for(var i in mess) BX.message[i]=mess[i]; return true;};</script><script type="text/javascript">(window.BX||top.BX).message({'JS_CORE_LOADING':'Загрузка...','JS_CORE_NO_DATA':'- Нет данных -','JS_CORE_WINDOW_CLOSE':'Закрыть','JS_CORE_WINDOW_EXPAND':'Развернуть','JS_CORE_WINDOW_NARROW':'Свернуть в окно','JS_CORE_WINDOW_SAVE':'Сохранить','JS_CORE_WINDOW_CANCEL':'Отменить','JS_CORE_WINDOW_CONTINUE':'Продолжить','JS_CORE_H':'ч','JS_CORE_M':'м','JS_CORE_S':'с','JSADM_AI_HIDE_EXTRA':'Скрыть лишние','JSADM_AI_ALL_NOTIF':'Показать все','JSADM_AUTH_REQ':'Требуется авторизация!','JS_CORE_WINDOW_AUTH':'Войти','JS_CORE_IMAGE_FULL':'Полный размер'});</script><script type="text/javascript" src="/bitrix/js/main/core/core.min.js?1597605468247888"></script><script>BX.setJSList(['/bitrix/js/main/core/core_ajax.js','/bitrix/js/main/core/core_promise.js','/bitrix/js/main/polyfill/promise/js/promise.js','/bitrix/js/main/loadext/loadext.js','/bitrix/js/main/loadext/extension.js','/bitrix/js/main/polyfill/promise/js/promise.js','/bitrix/js/main/polyfill/find/js/find.js','/bitrix/js/main/polyfill/includes/js/includes.js','/bitrix/js/main/polyfill/matches/js/matches.js','/bitrix/js/ui/polyfill/closest/js/closest.js','/bitrix/js/main/polyfill/fill/main.polyfill.fill.js','/bitrix/js/main/polyfill/find/js/find.js','/bitrix/js/main/polyfill/matches/js/matches.js','/bitrix/js/main/polyfill/core/dist/polyfill.bundle.js','/bitrix/js/main/polyfill/core/dist/polyfill.bundle.js','/bitrix/js/main/lazyload/dist/lazyload.bundle.js','/bitrix/js/main/polyfill/core/dist/polyfill.bundle.js','/bitrix/js/main/parambag/dist/parambag.bundle.js']);BX.setCSSList(['/bitrix/js/main/lazyload/dist/lazyload.bundle.css','/bitrix/js/main/parambag/dist/parambag.bundle.css']);</script><script type="text/javascript">(window.BX||top.BX).message({'LANGUAGE_ID':'ru','FORMAT_DATE':'DD.MM.YYYY','FORMAT_DATETIME':'DD.MM.YYYY HH:MI:SS','COOKIE_PREFIX':'BITRIX_SM','SERVER_TZ_OFFSET':'10800','SITE_ID':'s1','SITE_DIR':'/','USER_ID':'','SERVER_TIME':'1598284107','USER_TZ_OFFSET':'0','USER_TZ_AUTO':'Y','bitrix_sessid':'64ef157a16e5a6941cad1d1baa9639c4'});</script><script type="text/javascript">BX.setCSSList(['/bitrix/templates/corp_services_blue/styles.css','/bitrix/templates/corp_services_blue/template_styles.css']); </script><script type="text/javascript"> (function () { "use strict"; var counter = function () { var cookie = (function (name) { var parts = ("; " + document.cookie).split("; " + name + "="); if (parts.length == 2) { try {return JSON.parse(decodeURIComponent(parts.pop().split(";").shift()));} catch (e) {} } })("BITRIX_CONVERSION_CONTEXT_s1"); if (cookie && cookie.EXPIRE >= BX.message("SERVER_TIME")) return; var request = new XMLHttpRequest(); request.open("POST", "/bitrix/tools/conversion/ajax_counter.php", true); request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); request.send( "SITE_ID="+encodeURIComponent("s1")+ "&sessid="+encodeURIComponent(BX.bitrix_sessid())+ "&HTTP_REFERER="+encodeURIComponent(document.referrer) ); }; if (window.frameRequestStart === true) BX.addCustomEvent("onFrameDataReceived", counter); else BX.ready(counter); })(); </script> <!--[if lte IE 6]> <style type="text/css"> #support-question { background-image: none; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='./images/question.png', sizingMethod = 'crop'); } #support-question { left: -9px;} #banner-overlay { background-image: none; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='./images/overlay.png', sizingMethod = 'crop'); } </style> <![endif]--> <link rel="stylesheet" type="text/css" href="/bitrix/templates/corp_services_blue/colors.css" /> </head><body> <div id="page-wrapper"> <div id="panel"></div> <div id="header"> <table> <tr> <td id="logo"><a href="/" title="На главную страницу"></a></td> <td id="slogan"></td> </tr> </table> <div id="search"> <div class="flat"> <form action="/search/index.php"> <div id="search-button"> <input type="submit" name="s" id="search-submit-button" value="Поиск" onfocus="this.blur();"> </div> <div class="search-box"><input type="text" name="q"></div> </form> </div> </div> </div> <div id="content-wrapper"> <div id="content"> <div id="breadcrumb"> </div> <div id="workarea-wrapper"> <div id="left-menu"> </div> <div id="workarea"> <div id="workarea-inner"> <h5></h5> <p>CONTENT</p> </div> </div> </div> </div> <div id="sidebar"> <div id="sidebar-inner"> <div id="telephone"><nobr></nobr></div> <div id="schedule"><div class="schedule"> </div></div> <div id="support"> <div id="support-question"></div> <b class="r0"></b> <div id="support-text"><a href="/contacts/feedback.php">Задайте вопрос</a></div> <b class="r0"></b> </div> </div> </div> </div> <div id="space-for-footer"></div> </div> <div id="footer"> <div id="copyright"> </div> <div id="bottom-menu"> </div> </div> </body></html>
Видите ли Вы ошибку? может, ещё, какие-либо вкладки, файлы стоит посмотреть?
Вы, кажется, мне помогли! Убрал слэш, стало url: 'api.php', И код стал работать. Спасибо!
К сожалению, ещё не очень это умею, но учту. Спасибо!
Если быть совсем точным, то файл api.php расположен в C:\OSPanel\domains\test\www\rusakov
В этой же папке находится и файл index2.php.