-
Публікації
53 -
З нами
-
Відвідування
Тип публікації
Профілі
Форум
Маркетплейс
Статті
FAQ
Наші новини
Магазин
Блоги
module__dplus_manager
Повідомлення, опубліковані користувачем kairos
-
-
В общем следующий код на локальной машине отдает данные нормально:
$(document).ready(function(){ $.ajax({ url: "http://b.com", crossDomain: true, success: function( response ) { console.log(response); } }); });
<?php header('content-type: application/json'); header('Access-Control-Allow-Origin: http://a.com'); echo '{"foo":"bar"}'; ?>
То есть на локалке достаточно было убрать: dataType: "jsonp", однако на виртуальном хостинге этот код не работает, видимо блокировка идет где то на уровне настроек хостинга, интересно можно ли это решить средствами php или скажем путем добавления файла: .htaccess или тут без обращения в саппорт хостинга не обойтись?
-
Приветствую форумчане. Такая проблема, пытаюсь выполнить ajax запрос, суть которого отправить некоторые данные с домена: a.com на b.com и соответственно получить ответ от b.com с целью дальнейшей его обработки в скрипте на a.com
Оба домена находятся на OpenServer на локальной машине, то есть у меня есть контроль над http://b.com/ и я могу прописать в php файле необходимые настройки.
Однако при попытке выполнить ajax запрос получаю ошибку:
jquery-3.6.0.min.js:2 Cross-Origin Read Blocking (CORB) blocked cross-origin response http://b.com/?callback=jQuery360001053556176974424_1630579545897&_=1630579545898 with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details.
Аналогичную ситуацию имею на хостинге уже на реальных доменах.
При этом данные c a.com на b.com в php скрипт все же попадают, однако, мне не удается добиться чтения ответа на домене a.com.Что характерно в сети есть по меньшей мере один домен с которого таки удается получить данные таким способом.
Если вместо b.com подставить страницу:
https://jsonplaceholder.typicode.com/todos/1
то в этом случае получаю ответ:
{userId: 1, id: 1, title: "delectus aut autem", completed: false}
Однако же добиться аналогичного эффекта на домене под собственным контролем я не могу.
Пробовал в js указывать crossDomain: true, на стороне php пробовал указывать различные заголовки по типу:
header('content-type: application/json');
и тому подобное... пробовал даже скопировать из браузера заголовки которые отдает
сайт https://jsonplaceholder.typicode.com/todos/1 и подставить их в php файл через тот же header() однако ничего не выходит.Подскажите куда копать? Вопрос вроде плевый, но сколько не пытаюсь ничего не получается.
Ниже код js:
<script> //Первый вариант на jQuery: $(document).ready(function(){ $.ajax({ url: "http://b.com", crossDomain: true, dataType: "jsonp", success: function( response ) { console.log(response); } }); }); </script> <script> //Второй вариант на чистом js: function receiver(data){ console.log(data); } </script> <script src="http://b.com/?callback=receiver"></script>
код php:
<?php header('content-type: application/json'); header('Access-Control-Allow-Origin: http://a.com'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); echo '{"foo":"bar"}'; ?>
-
В общем получается что для такого кода:
document.addEventListener('DOMContentLoaded', function() { console.log('test DOMContentLoaded!!!'); document.qerySelector('#section-slideshow > .Slideshow > .Slideshow__Carousel > button.next').addEventListener('click', function (e) { console.log('test click!!!'); console.log(e); }); });
Первое сообщение: "test DOMContentLoaded!!!" - выводится, а при клике не кнопку второе: "test click!!!" - уже нет. Ну то есть событие клика этот код не отслеживает. Но повторюсь мне нужно не отследить событие клика, а именно вызвать его. Задача усложняется тем что эти кнопки:
<button class="flickity-prev-next-button-222 previous" type="button" aria-label="previous"><svg viewBox="0 0 100 100"><path d="M 10,50 L 60,100 L 70,90 L 30,50 L 70,10 L 60,0 Z" class="arrow"></path></svg></button>
они как бы создаются слайдером, возможно поэтому я не могу вызвать событие клика по ним к примеру тем же методом trigger для jQuery. -
33 minutes ago, ArtemPitov said:
document.addEventListener('DOMContentLoaded', function() { document.qerySelector('.flickity-prev-next-button').addEventListener('click', function (e) { console.log(e) }); })
Странно, выдает ошибку:
(index):1080 Uncaught TypeError: Cannot read property 'addEventListener' of null
at (index):1080
(index):1067 Uncaught TypeError: document.qerySelector is not a function
at HTMLDocument.<anonymous> ((index):1067)
Кроме того как я понимаю это код чтобы отследить событие клика? А мне нужно его вызвать, то есть с имитировать событие как будто пользователь кликнул на кнопку. -
Вопрос к знатокам JS. Пытаюсь вызвать событие клика на кнопку.
Однако событие не происходит. Решил проверить правильно ли отобрал кнопку на странице для дальнейшей работы с ней
В итоге вот такой код:var previousButton = document.querySelector('button.previous'); console.log(previousButton);
Выдает в консоль буквально следующее:<button class="flickity-prev-next-button-222 previous" type="button" aria-label="previous"><svg viewBox="0 0 100 100"><path d="M 10,50 L 60,100 L 70,90 L 30,50 L 70,10 L 60,0 Z" class="arrow"></path></svg></button>
И я вот тут что-то запутался. Он мне что вернул? Объект или строку с кодом? Если объект то подходит ли он для вызова события клика на него?
При этом в документации указанно что метод document.querySelector() - возвращает ссылку на объект типа Element линк:
https://developer.mozilla.org/ru/docs/Web/API/Document/querySelectorНо почему тогда я вижу в консоли строку с исходным кодом?
-
On 3/16/2021 at 4:44 PM, max2020 said:
а новые отделения руками добавляете? или все автоматически, как у европочты?
Здравствуйте. Я делал данную доработку для Scrin, API там как такового нет, данные парсяться с сайта европочты по крону раз в сутки, после этого на странице оформления заказа готовые данные подтягиваются уже из сайта заказчика. К симпле подключились небольшой модификацией в tpl файлах модуля. Если нужно могу вам сделать аналогичную реализацию. Пишите в ЛС.
- 1
-
Приветствую. Если не найдете исполнителя который возьмется за задачу "целиком" то обращайтесь, могу выполнить интеграцию с внешними сервисами, а также почти все пункты за исключением разве что дизайна. А так советовал бы вам разбить ТЗ на отдельные логические части и искать исполнителя отдельно по каждой из них - быстрее найдете. Ведь тот кто хорошо может сделать дизайн не факт что разбирается в системном администрировании и наоборот.
-
-
-
Да в 3-йке проблема осталась. Огромное спасибо за решение.
-
2 hours ago, Agatha65 said:
Надо запомнить раз и навсегда!
Роботс не запрещает индексирование страницы он запрещает обход этих страниц,.Запретит обход страниц ето зло.
Так появляются страници в серч конзоль - Страница была проиндексирована, несмотря на блокировку файлом robots.txt
Гугл хочет гулят по все страници, чтоби узнат структура сайта.
Чтобы запретить индексирование нужно добавить тег ноиндекс на самой странице,ето делают и ocfilter и filter Vier(там есть настройка с какого уровня добавлят ноиндекс), наверное и другие фильтри тоже.
Возможно вы правы, однако задача не состоит в том чтобы запретить поисковику обход страниц, а именно в том чтобы дублирующие страницы не появились в поиске, чтобы они не мешали продвижению основных страниц. Ноуиндекс здесь не совсем подходит так как на сколько я знаю работает он только лишь для Яндекса. Ну и кроме того решение о том каким именно образом закрывать страницы не всегда принимает разработчик, как правило есть заказчик, которому задачи могут ставить seo-шники.
-
3 hours ago, Soong said:
однозначно ocfilter
остальные свои задачи решать можно с помощью robots
Забавно изначально стоит OCFilter но он как раз эту задачу и не решает, ну тесть не дает никакого признака по которому можно было бы закрыть страницу от индексации. или возможно я не нашел в настройках, но смотрел внимательно. Пока остановил свой выбор на:
Там прямо в демке видно что есть признак в url для всех страниц фильтра.
-
В общем появилась необходимость поставить на сайт такой фильтр товаров, страницы которого точно не попадут в индекс поисковых систем. То есть нужно чтобы хвостовая часть url которая отвечает за выбранные в фильтре опции либо подставлялась через знак # либо же чтобы страницы фильтра можно было промаркировать в url некоторым словом например: /filter/option1/option2/ и так далее. Чтобы в последствии такие ссылки можно было закрыть от индексации в robots.txt при помощи этого признака. Товаров в магазине на данный момент больше 2-х тысяч поэтому нужно чтобы фильтр нормально "тянул" такое количество и не приводил к тормозам магазина. Сейчас смотрю на форуме различные варианты но возможно знающие пользователи сходу смогут подсказать готовое решение.
-
В общем нашел, статус меняется в файле: catalog/model/checkout/order.php если точнее то меняют его вот эти строки:
// Update the DB with the new statuses $this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_status_id = '" . (int)$order_status_id . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "order_history SET order_id = '" . (int)$order_id . "', order_status_id = '" . (int)$order_status_id . "', notify = '" . (int)$notify . "', comment = '" . $this->db->escape($comment) . "', date_added = NOW()");
-
Интересно, а куда в таком случае улетает форма при сохранении заказа в админке? В пути указано: ?route=sale/order/edit значит по идее ее должен контроллер в админке принимать? Каким образом получается что эту форму обрабатывает фронт?
-
В общем понадобилось совершать определенное действие при изменении статуса заказа, первой мыслю было сделать это в соответствующем методе модели, в файле: admin/model/sale/order.php есть метод getOrder() однако никакого намека на метод edit либо же editOrder в этом файле нет... произвел поиск по слову UPDATE, в итоге единственный UPDATE нашелся в строчке:
$this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");которая явно не подходит под обновление всего заказа. Короче говоря не пойму, какой именно метод добавляет или обновляет в базу данных информацию о заказе. Думаю ладно поищу нужный метод в контроллере в итоге в файле admin/controller/sale/order.php нашел метод edit() со следующим содержимым:
public function edit() { $this->load->language('sale/order'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('sale/order'); $this->getForm(); }
Ну то есть никаких тебе $this->request->post и опять же нет вызова модели которая обновляет информацию о заказе. Есть правда вызов метода $this->getForm(); но он достаточно большой и там не очевидно как понять что форма была отправлена на сервер, а не скажем просто загружена при открытии заказа на редактирование. Ну и опять же любопытно какой метод все таки обновляет информацию о заказе в бд.
-
Если нужно бесплатно то только брать дефолтный шаблон и изменять его под себя. Все же более менее хорошие шаблоны будут платными. У дефолтного шаблона единственный + в том что он совместим по умолчанию со всеми модулями.
-
Получается чтобы написать модуль для обмена с 1С нужно купить эту программу и установить себе на ПК? Возможно существуют какие то демки для таких целей?
-
Собственно сабж. Ну типа на сколько я понимаю 1С устанавливается на ПК пользователя, а не на сервере.. или нет? Ну то есть получается из самой 1С-ки данные можно пихать напрямую в базу Opencart или же через какую то прокладку. Но как передать инфу из движка назад в 1С? Ну например информацию о заказах, статистике продаж или что там еще нужно передавать?
Для api сервисов это делается путем отправки POST/GET запросов на определенный url. Но куда слать запросы если 1С стоит на компе пользователя? Или я чего то не понимаю и 1С давно в облаках крутится? -
Предложенный whiteblue видимо дороговат если покупать только для этой задачи, проще будет сделать индивидуальное решение, отписал вам в ЛС.
-
В целом задача понятна, написал вам в личку. Если актуально - обращайтесь.
-
Отписал Вам в лс.
-
2 hours ago, spectre said:
Опции - горячие клавиши
Спасибо получилось выставить во вкладке Scintilla Commands правда переход в начало и конец документа получилось поставить только на Ctrl+Shift+Home и Ctrl+Shift+End на Ctrl+Home/Ctrl+End почему то не получается поставить.
-
Скорее всего в следствии обновления программы, горячие клавиши которые отвечали за быстрое перемещение по документу (как то Ctrl+End, Ctrl+Home, Ctrl+PgDn, Ctrl+PgUp) стали перемещать курсор не в рамках текущей вкладки, а перемещают его в произвольное место какой либо другой из паралельно открытых вкладок. В итоге стало не удобно работать с большими файлами. Может кто то сталкивался с такой проблемой?
Ajax запрос между разными доменами как настроить правильный ответ сервера?
в Системне адміністрування (налаштування хостингу, серверів, ПЗ)
Опубліковано: · Змінено користувачем kairos
Во общем да, оказалось что дело в настройках хостинга, я попробовал получить данные из другого сервера и все работает нормально.
На проблемном хостинге помог файл: .htaccess со следующим содержимым:
При этом аналогичные запросы из php файла пришлось убрать, итоговый код:
PHP:
JS:
$(document).ready(function(){ $.ajax({ url: "https://b.com/", crossDomain: true, success: function( response ) { console.log(response); } }); });