Доброе утро, Гость! Представляем Вам наши форумы. Вы можете зарегистрироваться чтобы писать на форумах или зайдите под своим именем, если Вы уже регистрировались.
   
   


Форум
 SX CMS / Техническая помощь
         ajax и указание url в его параметрах

Похожие темы

ajax и указание url в его параметрах


События Пятница, 02.03.2012, 19:44

divan

Группа: Пользователь
Cообщений: 9
Регистрация: 24.09.2011
Город: qwert
Добрый вечер, столкнулся с такой проблемой, есть самописный модуль, теперь появилась необходимость динамического обновления контента (обновление данных в блоке по таймеру), соответственно пишу script на ajax, в параметрах указываю url к php, который "лезет" в базу и возвращает контент, но столкнулся с такой проблемой, что скрипт не работает, т.к. не видит данный файл. Для чистоты эксперимента сделал php примитивно - просто вывод текущего времени (<?php echo date("H:i:s"); ?>) и теперь получается, что если файл php кладу в корень сайта (рядом с index.php), а в скрипте указываю:$.ajax({url: "time.php", cache: false, success: function(html){$("#content").html(html);}}); то все отлично работает, но если положить файл time.php в шаблон модуля и указать путь до модуля url: "{$tpl}/guest/time.php", то ajax не отправляет запросы (слэши пробовал как одинарные, так и двойные). В консоли ошибок ни каких ошибок не фиксируется (использую ff), ошибок smarty так же нет. Переменная {$tpl} точно содержит верный путь, т.к. неоднократно используется при подключении других файлов.
Пожалуйста, подскажите, в чем моя ошибка и как мне указать url до модуля так, чтобы php был виден и выполнялся???

P.S.: не знаю, интересно кому или нет, но в статьях обнаружил, что если в статье заполнить оценки, то в дальнейшем все эти оценки, при просмотре статьи, отображаются под панелями авторизации, новыми пользователями и т.д. Мне это не актуально, поэтому не исправлял. Смешно

Отредактировано divan: 02.03.2012, 19:47:21

Пользователь офлайн
События Суббота, 03.03.2012, 19:34

SX

Группа: Администратор
Cообщений: 3016
Регистрация: 23.10.2009
Цитата
Переменная {$tpl} точно содержит верный путь, т.к. неоднократно используется при подключении других файлов

Если вы правильно отписали, именно подключение, то для подключения используется включая папки сервера, а вот для вызова файла нужет путь именно от корневой директории сайта
Цитата

P.S.: не знаю, интересно кому или нет, но в статьях обнаружил, что если в статье заполнить оценки, то в дальнейшем все эти оценки, при просмотре статьи, отображаются под панелями авторизации, новыми пользователями и т.д. Мне это не актуально, поэтому не исправлял.


У вас в контенте нарушена парность тегов, частая проблема при копипасте


Благодарности divan
Пользователь офлайн
События Суббота, 03.03.2012, 22:31

divan

Автор текущей темы
Группа: Пользователь
Cообщений: 9
Регистрация: 24.09.2011
Город: qwert
Цитата
Автор: Status-X
Если вы правильно отписали, именно подключение, то для подключения используется включая папки сервера, а вот для вызова файла нужет путь именно от корневой директории сайта

Спасибо, пробовал и так, и так (даже права на файлы проверял), но стыдно признаться, ошибка была сильно банальна, при объявлении пути до модуля сделал опечатку в слове modules Грустно и двое суток не видел этого

Цитата
Автор: Status-X
У вас в контенте нарушена парность тегов, частая проблема при копипасте

Буду знать и проверю теги на парность.
На самом деле, переключился на "источник" и сразу увидел проблему копипаста не через блокнот Смешно


Отредактировано divan: 03.03.2012, 22:43:20
Пользователь офлайн
События Воскресенье, 18.03.2012, 18:02

divan

Автор текущей темы
Группа: Пользователь
Cообщений: 9
Регистрация: 24.09.2011
Город: qwert
Решил не плодить темы, поэтому хочу задать ещё один вопрос, который не могу уже долго решить.
По прежнему продолжаю "биться" над динамическим обновлением страницы и в общем-то вопрос в следующем:
есть такой код:
Код
jQuery.ajax({
type: "POST",
url: "{$path}/chat.php",
cache: false,
data: "action=refresh",
error: function(){
$("#messages").html('Ошибка AJAX');
},
success: function(html){
$("#messages").html(html);
}
});

В классе chat.php стандартное:
Код
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
if (!defined('STATUS_DIR')) exit('Доступ запрещен');
if (!permission('chat')) Sys::getClass('Core')->getNoPerm();
include (MODUL_DIR . '/chat/class/class.Chat.php');
$_POST['action'] = !empty($_POST['action']) ? $_POST['action'] : 'start';
switch (Sys::get($_POST, 'action')){
default:
break;
case 'start' :
Sys::getClass('Chat')->start();
break;
case 'refresh' :
Sys::getClass('Chat')->getMessages();
break;
}
?>

При такой реализации я получаю "Доступ запрещен". Также пробовал сделать вызов через url: "index.php", data: "p=chat&action=refresh",но при такой попытке switch переключался на start,а не на refresh
Ради эксперимента, делал отдельный класс, в котором было прописано подключение к базе и обработка запроса, получения из базы данных и вызов был в виде url: "{$path}/badChat.php", все работает, но ни как не соответствует контексту безопасности.
В общем-то вопрос, как правильно реализовать данный ajax запрос, чтобы в chat.php не ловить "Доступ запрещен" и корректно по запросу POST переходить к получению сообщений? Или может быть есть какие-то другие способы перегрузить div?
Сумбурно как-то получилось описать, поэтому в двух словах: делаю модуль чата, есть div, в который выводятся сообщения и в принципе уже почти все работает, за исключением динамического обновления по таймеру. Перезагружать всю страницу, это как-то не правильно :)
Пользователь офлайн
События Воскресенье, 18.03.2012, 18:38

SX

Группа: Администратор
Cообщений: 3016
Регистрация: 23.10.2009
Цитата
Также пробовал сделать вызов через url: "index.php", data: "p=chat&action=refresh",но при такой попытке switch переключался на start,а не на refresh

Ну так отловите почему не приходит action, а так это правильный вариант, с отдельным файлом гемороя будет гораздо больше

Цитата
include (MODUL_DIR . '/chat/class/class.Chat.php');

Это не нужно, классы автоматом грузятся из папки классов.

А самый правильный вариант, реализовывать все через модуль, там все просто посмотрите на примере модуля test или donate


Пользователь офлайн
События Воскресенье, 18.03.2012, 19:14

divan

Автор текущей темы
Группа: Пользователь
Cообщений: 9
Регистрация: 24.09.2011
Город: qwert
Цитата
Автор: Status-X
А самый правильный вариант, реализовывать все через модуль, там все просто посмотрите на примере модуля test или donate

Именно как модуль все это и делаю Смешно Спасибо за наводку, буду пытаться найти, за счет чего action теряется...
С отдельным файлом я попробовал, ради чистоты эксперимента Смешно


Отредактировано divan: 18.03.2012, 19:17:13
Пользователь офлайн
События Четверг, 22.03.2012, 00:41

divan

Автор текущей темы
Группа: Пользователь
Cообщений: 9
Регистрация: 24.09.2011
Город: qwert
Всем, доброй ночи. Разобрался где и почему теряется action. Все исправил, но столкнулся со следующей "проблемой", если посмотреть в мое сообщение выше, то в классе chat.php в методе refresh запрашиваются из базы новые сообщения, там же формируется json массив для возврата клиенту, но не все так просто оказалось. Дело в том, что помимо формируемого массива, к данным, в самый конец, добавляется html код стартовой страницы. Для себя решил эту "проблему" так: в index.php добавил дополнительное условие вида (знаю, что условия требуют объединения в одно через && Смешно )
Код
if(Sys::get($_REQUEST, 'action') != 'refresh'){
$out = (Sys::get($_REQUEST, 'blanc') == 1) ? $CS->getOutFinal(SOURCE . '/page/popup.tpl') : $CS->getOutFinal(SOURCE . '/' . ($Core->getPrintVersion() ? 'page/print.tpl' : 'page/' . $tpl));
}

тогда HTML код не добавляется к данным и JSON формируется корректный. Но, т.к. я все это делаю в виде отдельного модуля, то считаю данный способ не совсем корректным. Можно-ли как-то (может при указании в параметрах, хотя не нашел таких условий) сделать так, чтобы HTML код не добавлялся к данным JSON'а не внося какие-либо изменения в index.php и прочие классы не относящиеся к модулю???
Пользователь офлайн
События Четверг, 22.03.2012, 00:59

SX

Группа: Администратор
Cообщений: 3016
Регистрация: 23.10.2009
В функциях которые формируют только вывод аяксом нужно объявить константу AJAX_OUTPUT

PHP-код
Sys::setDefine('AJAX_OUTPUT'1);



Благодарности divan
Пользователь офлайн
События Пятница, 23.03.2012, 00:22

divan

Автор текущей темы
Группа: Пользователь
Cообщений: 9
Регистрация: 24.09.2011
Город: qwert
Ещё раз, спасибо, как всегда, не заметил подсказку, которая тут-же, по сути лежала Смешно буквально же парой строчек выше четко написано
PHP-код
if (!defined('AJAX_OUTPUT')) {
Получилось, что задал глупый вопрос, но все равно, спасибо Смешно
Пользователь офлайн


Похожие темы  |   Предыдущая тема  |   Следующая тема

Быстрый переход:  
 

 Сейчас на сайте

Пользователей: 0, Гостей: 3

Поисковые боты: 193
Bot(180), oBot(8), BingBot(4), Googlebot
 Статистика форума

  Темы Сообщения Пользователи
За сутки:
За неделю:
За месяц:
Всего:
Мы приветствуем нового участника: dota812651
 Дни рождения

alexkon (52)
Copyright © 2009 - 2024 SX All rights reserved | Powered by SX CMS 1.06 UTF | Контакты