Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » jQuery » Автоматическое обновление данных в блоке на AJAX

Автоматическое обновление данных в блоке на AJAX


     11.02.2012    Ajax    jQuery, Общие вопросы по PHP    6875

вопрос
Всем привет. Довольно редко пишу сюда, но всётаки решил прибегнуть к этому. Довольно не плохо владею пхп и всё было бы не плохо, если бы требования к моим работам только им и ограничивались. В силу чего начал практиковаться в AJAX.

Для начала расскажу чего я пытался добится. Мне нужно было сделать кнопочку, которая бы при нажатии на неё записывала данные и после добавления данных выводила блок с количеством записей. Девайс этот очень похож на длешное "Избранное". Поэтому я и решил посмотреть его код и взять от туда идею для реализации своей этой фишечки. Написал я Jquery функцию, сделал php сценарий для обработки переданных данных. Казалось бы что почти всё готово, осталось только добавить ещё одну функцию квери для вывода блока и вызвать её в конце функции добавления данных. php коды для обоих функций получились довольно маленькими и я решил делать их в одном файле. Так как регистрации у меня на сайте нет, а данные хранить где-то нужно, я создал массив в пользовательской сессии и работать уже с ней. Возможности очистики этого массива я вывел в другом разделе, где собственно эти данные используются в явном виде. Квери функции выглядят так:



Файл comparsion.php представляет собой вот что:



За реализацию прошу не пинать, это моя первая проба пера. Надеюсь на помощь

Ответил: rashpil


Разобрался сам, надо было правильно написать условие и переписать первую функцию Jquery.

11 комментариев

rashpil
Эксперт

rashpil - 11 февраля 2012 23:59 -

Так увлёкся описанием проблемы, что забыл о самом главном. После тыкания кнопочки если в массиве это был первый элемент, то реакции 0. Ежели это второй элемент, то выводит блок, но показывает переменную $count пустой.

rashpil
Эксперт

rashpil - 12 февраля 2012 19:46 -

Ну что ребят, никто не поможет чтоль? crying

nowheremany
Эксперт

nowheremany - 12 февраля 2012 21:19 -

Явная ошибка с синтаксисом
$.post(dle_root + "engine/ajax/comparsion.php",{},  function(data){


ДА и ещё. Наверно имелось ввиду так
  HideLoading('');
  $("#cmr-id-" + cmr_id).html(data);
comparsion_block ();
});
return false;

Благодарность принимаю тут Связь

rashpil
Эксперт

rashpil - 12 февраля 2012 23:41 -

Ошибки поправил, результат всё тот же

nowheremany
Эксперт

nowheremany - 13 февраля 2012 07:46 -

В php не увидел как присваивается значение переменной $count

Благодарность принимаю тут Связь

rashpil
Эксперт

rashpil - 13 февраля 2012 11:10 -

Переписал часть php вот так:


$id = intval( $_REQUEST['cmr_id'] );
if ($id){

    if( $_REQUEST['action'] == "plus" ) {
    
        if (!in_array($id, $_SESSION['comparison'])) $_SESSION['comparison'][] = $id;
        
        $buffer = "<img src=\"" . $config['http_home_url'] . "templates/{$config['skin']}/dleimages/minus_fav.gif\" onclick=\"comparsion('" . $id . "', 'minus'); return false;\" title=\"" . $lang['news_minfav'] . "\" style=\"vertical-align: middle;border: none;\" />";

    } elseif( $_REQUEST['action'] == "minus" ) {

        unset($_SESSION['comparison'][$id]);
        
        $buffer = "<img src=\"" . $config['http_home_url'] . "templates/{$config['skin']}/dleimages/plus_fav.gif\" onclick=\"comparsion('" . $id . "', 'plus'); return false;\" title=\"" . $lang['news_addfav'] . "\" style=\"vertical-align: middle;border: none;\" />";

    }

@header( "Content-type: text/css; charset=" . $config['charset'] );
echo $buffer;        
}
    
if (count($_POST) == 0 AND count($_SESSION['comparison'])) {
    $block = "<div id=\"cmr_block\"><div style=\"width:200px; height:100px; top:200px; left:0; position:fixed; float:left;z-index:10;\">
                    <div align=\"left\">Автомобилей для сравнения: <a href=\"{$config['http_home_url']}index.php?do=comparison\">". count($_SESSION['comparison']) . "</a>";

    $block .= "</div></div></div>";

@header( "Content-type: text/css; charset=" . $config['charset'] );
echo $block;    
    
}


Почти всё заработало, за исключением одного ньюанса. Когда добавляешь первое значение в массив (т.е. самый первый клик по кнопке), блок не появляется. А когда уже значение 2 там или больше, то всё появляется и отображается корректно.

Я так понимаю, что нужно 2 раза обращаться к пхп файлу средствами аякс. В первый раз чтобы добавить кнопочку, а во второй уже чтобы вывести блок. Это скорее к вопросу о расположении сценариев

nowheremany
Эксперт

nowheremany - 13 февраля 2012 11:16 -

$_SESSION['comparison'][] = $id;
и
unset($_SESSION['comparison'][$id]);
разные вещи же...

и первый вариант был более читабелен и менее ошибочен в структуре кода.

Да и пост запрос с пустыми данными не очень хорошо. Лучше бы GET

И чтобы было вообще красиво json в помощь. Был 1 запрос. И ещё если уж совсем чтобы красиво в JS вывести весь HTML, а в php оставить скриптовую работу. А если вообще чтобы красота была - отказаться от PHP и заюзать JQuery куки

Благодарность принимаю тут Связь

rashpil
Эксперт

rashpil - 13 февраля 2012 12:09 -

Да не, там не в удалении и добавлении элементов в массив дело. С GET запросом тоже пробовал, результат всё тот же. В JS и всех его преспешниках я не особо смыслю, ибо буквально недавно начал их изучать. Меня беспокоит первая запись данных в массив и то, почему она не определяется при условии.

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

nowheremany
Эксперт

nowheremany - 13 февраля 2012 12:53 -

comparsion_block ();
ты кинул куда я написал?

попробуй посмотреть как она выводится, т.е. $count кинуть в вывод плюса с минусом.

Благодарность принимаю тут Связь

rashpil
Эксперт

rashpil - 13 февраля 2012 13:56 -

Да эти штуки все сделал. На этот раз правильно послал данные методом GET, переписал условия и похоже что функция заработала :) Осталось только оформоление сдать.

Спасибо за помощь!

ПафНутиЙ
Админ

ПафНутиЙ - 13 февраля 2012 19:17 -

Поправь ответ, если не сложно.

Каков вопрос - таков и ответ. Просто помните об этом.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх