Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400

Выполнение скрипта после подгрузки

08.01.2018, 12:28. Показов 1999. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!

Получаю через AJAX часть страницы с кнопкой и скрипт обработки этой кнопки в котором также написан AJAX, почему то не получаю результат, как научиться проверять?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
if ($_POST['phrase'] == 'add'){
            $id = $_POST['id'];
            $idproject = $_SESSION['id_project'];
            $userid = $_SESSION['user_id'];
 
            $result = "$id $idproject $userid";
        }
 
        if ($_POST['menu_link'] == 'vvod4'){
            $result .= '<div class = "promo">
                <div class = "promoImg"></div>
                <div class = "promoZag">Выберите подходящие фразы</div>
                <div class = "promoText">';
                        $prePhrase=DB::query("SELECT * FROM `new_phrases_pre` WHERE `status` = '1'");
                        $check = DB::num_rows($prePhrase);
                        if ($check > 0) {
                            while ($row = DB::fetch_object($prePhrase)) {
                                $phrase = $row->phrase;
                                $id = $row->id;
                                $result .= '<div style="display: block; height: 30px; padding-bottom: 5px;"><p style="display: inline-block; line-height: 30px; font-size: 1.2em;">'.$phrase.'</p><button style="display: inline-block; width: 200px; float: right; height: 30px; font-size: 1em;" name="send" id="phrase_'.$id.'">Выбрать</button></div>';
                                $result .= '<script>$(document).on("click", "#phrase_'.$id.'", function(e){
        e.preventDefault();
        $.ajax({
            url: "tmpl/obrabotka.php",
            type:"post",
            data: {phrase: "add", id:"'.$id.'" },
            success:function(loader){
                $("#wrapper").html(loader);
            }
        });
    }); </script>';
                            }
                        } else {
                            $result .= "<p>Пусто</p>";
                        }
            $result .= '</div>
            </div>';
        }
И может вообще такое можно делать как то по другому?
Задача вообще такая: получать строки из БД, к каждой строке добавлять кнопку, по нажатию кнопки эта строка удаляется из БД (этот кусок убран пока из кода, ибо я даже не могу получить на выводе хоть что то...) и данные вновь подгружаются, но уже без этой строки.

Добавлено через 13 часов 12 минут
Оказывается все работает, но просто я код обработки phrase = add засунул в участок кода
PHP
1
if (isset($_POST['menu_link'])) {
я решил проверять работоспособность добавив в success alert. В итоге если я кликну по одной строке - alert отрабатывает, затем кликаю по третей строке - alert отрабатывает 2 раза, и так далее с каждым разом alert работает на 1 раз больше.

Добавлено через 2 часа 25 минут
В общем после каждого клика количество используемой памяти увеличивается)) Как с этим бороться?

Добавлено через 4 минуты
я так подозреваю что это отголосок вопроса выше о alert`ах... скрипт с каждым разом все чаще выполняется...

Добавлено через 1 минуту
Смотрю Network там ооооочень много обращений на файл obrabotka.

Добавлено через 15 минут
короче я понял что надо как то UNBIND делать, сейчас ищу как...

Добавлено через 3 минуты
JavaScript
1
2
        $( "#phrase_'.$id.'").unbind( "click" );
        $( "#del_'.$id.'").unbind( "click" );
Попробовал так, но не помогает

Добавлено через 38 секунд
это конечно же в PHP коде написано
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2018, 12:28
Ответы с готовыми решениями:

Выполнение скрипта сразу после загрузки страницы
Добрый день. Сложилась проблема. Есть Яваскрипт который так скажем делает текст резиновым, при изменении размера экрана браузера...

Выполнение скрипта после нажатия на кнопку и перезагрузки страницы
Здравствуйте! Нажимаю на кнопку, страница перезагружается но скрипт не выполняется $('#go_post').click(function() { ...

Работа с селекторами, после подгрузки html через ajax
Добрый день! Подскажите как сделать, что бы в подгруженный html была возможность работать с ним другими функциями. Кнопка вызывает...

6
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
08.01.2018, 12:42  [ТС]
Вот 3 раза кликнул, на фотке видно что с каждым разом obrabotka.php выполняется в 2 раза больше.
Миниатюры
Выполнение скрипта после подгрузки  
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
08.01.2018, 12:51
В общем случае это делается не так.
Вам надо написать одну универсальную функцию для обработки ваших подгружаемых элементов. На сервере формируете только разметку, необходимые данные (id записи и т. д.) указывайте в data-* атрибутах - потом эти данные будете брать из скрипта на клиенте и выполнять необходимые действия.
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
08.01.2018, 12:56  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$result .= '
    <script>
    $(function(){
        $("#phrase_'.$id.'").one("click", function(e){
            e.preventDefault();
            $.ajax({
                url: "tmpl/obrabotka.php",
                type:"post",
                data: {phrase: "add", id: "'.$id.'" },
                success:function(loader){
                    $(this).unbind( "click" );
                    $("#wrapper").html(loader);
                }
            });
            return false;
        });
        $("#del_'.$id.'").one("click", function(e){
            e.preventDefault();
            $.ajax({
                url: "tmpl/obrabotka.php",
                type:"post",
                data: {phrase: "del", id: "'.$id.'" },
                success:function(loader){
                    $(this).unbind( "click" );
                    $("#wrapper").html(loader);
                }
            });
            return false;
        }); 
    });
    </script>';
Вот так переписал всё заработало)

Добавлено через 49 секунд
Цитата Сообщение от j2FunOnly Посмотреть сообщение
В общем случае это делается не так.
А можно подробнее с примером, пожалуйста?
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
08.01.2018, 13:08
Лучший ответ Сообщение было отмечено vino0s как решение

Решение

Без серверной части.
HTML5
1
2
3
4
<button id="btn-add">
  Add
</button>
<div id="list"></div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var id = 0;
 
// имитация запроса к серверу, будто бы пришел ответ с разметкой
var getData = function() {
  return `
    <div class="list-item" data-id="${++id}">
        list item text ${id}
      <button class="btn delete">Delete</button>
    </div>
  `
}
 
$('#btn-add').click(function() {
  $('#list').append(getData());
});
 
/**
 * Собственно достаточно одной функции для обработки подгружаемых элементов.
 * Так как обработчики можно назначать только существующим элементам,
 * необходимо делегировать клик родительскому элементу.
 */
$('#list').on('click', '.delete', function() {
  var $parent = $(this).closest('.list-item');
 
  console.log('Record with id: ' + $parent.data('id'));
  // тут мы получили id, можно отправить ajax запрос на сервер и т. д.
 
  $parent.slideUp(200, function() {
    $(this).remove()
  });
});
https://codepen.io/anon/pen/LeeWOQ?editors=0011
1
28 / 22 / 15
Регистрация: 29.11.2017
Сообщений: 75
09.01.2018, 00:28

Не по теме:

html+css+js+php+sql = один файл! Какая крутотень в этом разбираться)



Добавлено через 9 минут

Не по теме:

А потом начнут отправлять запросы в бд с переменными без надлежащей проверки.
Вот заказчик тогда повеселится после первой же недели в продакшене)

0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
09.01.2018, 10:25  [ТС]
Цитата Сообщение от МихаилБасов Посмотреть сообщение
Какая крутотень в этом разбираться
Было бы кому разбираться ещё)) Так то большая часть разделена... Просто когда делаю что то чего нет, то сначала в одном файле, чтоб не бегать с файла к файлу) Скажу больше - GitHub не используется)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2018, 10:25
Помогаю со студенческими работами здесь

Обновление подсказок плагина .mTip, после подгрузки контента аяксом
Всем здравствуйте, есть страница, на которой работают плагин подсказок mTip, после аякса, возникла проблема,видимо плагин надо...

Выполнение скрипта
Есть php файл который заносит определенное значение в БД. Как вызывать этот файл, не перезагружая страницу. Слышал про ajax, но толком...

Постоянное выполнение скрипта?
Доброго времени суток, суть: есть скрипт jquery он плавно меняет текст, но есть одна проблема -- он не зациклен. Что можно с этим поделать?...

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

Подключение и выполнение скрипта
Только начал юзать JQuery. Подскажите, что не так? Окошко не вылазит. &lt;script type=&quot;text/javascript&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru