Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.03.2016, 15:20
Аспирант
Отправить личное сообщение для grisha2217 Посмотреть профиль Найти все сообщения от grisha2217
 
Регистрация: 04.11.2013
Сообщений: 40

Конфликтуют 2 AJAX скрипта
По какой-то причине, когда кликаешь по #changepwd, то в #changepwd-box записывается результат сразу двух скриптов: changepwd и #last-activity-button
Как пофиксить?

$(function(){
			$('#last-activity-button').click(function(){
				var view = 'act=last_activity&user_id=<?php echo $_COOKIE['user_id']; ?>&token=<?php echo $token; ?>&hash=<?php echo $hash; ?>'; //
				$.ajax({
					type : "POST",
					url : "ajax.php",
					data: view,
					success:function(view){
						$('#results').empty().append(view);
					},
					error: function(){
						$('#results').empty().text(view);
					}
				});
			});
		});


$(function(){
			$('#changepwd').click(function(){
				var old_pwd = $("#settings_old_pwd");
				var new_pwd = $("#settings_new_pwd");
				var confirm_pwd = $("#settings_confirm_pwd");
				var changepwd = 'act=changepwd&user_id=<?php echo $_COOKIE['user_id']; ?>&old_pwd='+ old_pwd.val() +'&new_pwd='+ new_pwd.val() +'&confirm_pwd='+ confirm_pwd.val() +'&token=<?php echo $token; ?>&hash=<?php echo $hash; ?>'; //
				$.ajax({
					type : "POST",
					url : "ajax.php",
					data: changepwd,
					success:function(msg){
						$('#changepwd-box').text(msg);
					},
					error: function(){
						$('#changepwd-box').text(msg);
					}
				});
			});
		});
Ответить с цитированием
  #2 (permalink)  
Старый 02.03.2016, 16:17
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

grisha2217,
Может потому что один из них вложен в другой и происходит всплытие события?
Ответить с цитированием
  #3 (permalink)  
Старый 02.03.2016, 16:29
Аспирант
Отправить личное сообщение для grisha2217 Посмотреть профиль Найти все сообщения от grisha2217
 
Регистрация: 04.11.2013
Сообщений: 40

Сообщение от destus Посмотреть сообщение
grisha2217,
Может потому что один из них вложен в другой и происходит всплытие события?
Подскажите, мне пожалуйста, где происходит вложение? Если действие наложено на разные иденфикаторы
Ответить с цитированием
  #4 (permalink)  
Старый 02.03.2016, 16:32
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

grisha2217,
https://learn.javascript.ru/event-bubbling
Ответить с цитированием
  #5 (permalink)  
Старый 02.03.2016, 21:45
Аспирант
Отправить личное сообщение для grisha2217 Посмотреть профиль Найти все сообщения от grisha2217
 
Регистрация: 04.11.2013
Сообщений: 40

destus, ааа, что я делаю не так?
$(document).ready(function () {
				$('#last-activity-button').click(function() {
					var view = 'act=last_activity&user_id=<?php echo $_COOKIE['user_id']; ?>&token=<?php echo $token; ?>&hash=<?php echo $hash; ?>'; //
					$.ajax({
						type: "POST",
						url: "ajax.php",
						data: view,
						success: function (view) {
							$('#results').empty().append(view);
							view.preventDefault();
						},
						error: function (view) {
							$('#results').empty().text(view);
							view.preventDefault();
						}
					});
				});
		});


$(document).ready(function () {
				$('#changepwd').click(function () {
					var old_pwd = $("#settings_old_pwd");
					var new_pwd = $("#settings_new_pwd");
					var confirm_pwd = $("#settings_confirm_pwd");
					var changepwd = 'act=changepwd&user_id=<?php echo $_COOKIE['user_id']; ?>&old_pwd=' + old_pwd.val() + '&new_pwd=' + new_pwd.val() + '&confirm_pwd=' + confirm_pwd.val() + '&token=<?php echo $token; ?>&hash=<?php echo $hash; ?>'; //
					$.ajax({
						type: "POST",
						url: "ajax.php",
						data: changepwd,
						success: function (msg) {
							$('#changepwd-box').text(msg);
							msg.preventDefault();

						},
						error: function (msg) {
							$(this).parent().prev().text(msg);
							msg.preventDefault();
						}
					});
				});
		});



Как я понял, нужно использовать GET для вывода информации в сгенерированное окно:
<a href="ajax.html" id="manual-ajax">second example</a>

// Open modal in AJAX callback
$('#manual-ajax').click(function(event) {
  event.preventDefault();
  $.get(this.href, function(html) {
    $(html).appendTo('body').modal();
  });
});


Но это не удобно, как можно решить проблему не меняя схему работы скрипта?

Последний раз редактировалось grisha2217, 02.03.2016 в 21:55.
Ответить с цитированием
  #6 (permalink)  
Старый 02.03.2016, 22:06
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

grisha2217,
HTML разметку надо, где есть элементы с id = last-activity-button и id = changepwd. Да и $.get смысла нет использовать, если можно прописать type в $.ajax.
$.ajax({
  type : 'GET',
  ...
})
Ответить с цитированием
  #7 (permalink)  
Старый 02.03.2016, 22:32
Аспирант
Отправить личное сообщение для grisha2217 Посмотреть профиль Найти все сообщения от grisha2217
 
Регистрация: 04.11.2013
Сообщений: 40

Сообщение от destus Посмотреть сообщение
grisha2217,
HTML разметку надо, где есть элементы с id = last-activity-button и id = changepwd. Да и $.get смысла нет использовать, если можно прописать type в $.ajax.
$.ajax({
  type : 'GET',
  ...
})
Держи:
<ul class="tab-post-container text" >
										<li class="settings_section">
											<h2>Смена пароля</h2>
											<div class="settings_row_wrap">
											<div class="fl_l ta_r settings_label">Старый пароль:</div>
											<div class="fl_l"><input type="password" id="settings_old_pwd"></div>
											</div>
											<div class="settings_row_wrap">
											<div class="fl_l ta_r settings_label">Новый пароль:</div>
											<div class="fl_l"><input type="password" id="settings_new_pwd"></div>
											</div>
											<div class="settings_row_wrap">
											<div class="fl_l ta_r settings_label">Повторите пароль:</div>
											<div class="fl_l"><input type="password" id="settings_confirm_pwd"></div>
											</div>
											<div class="settings_row_wrap">
											<div id="changepwd-box" class="fl_l ta_r settings_label"></div>
											<div class="fl_l"><span id="changepwd" class="button primary">Изменить пароль</span>
											</div>
                                                </div>
										</li>
										<li class="settings_section">
											<h2>Последняя активность</h2>
											<div class="settings_row_wrap">
											<div class="fl_l ta_r settings_label">Последний онлайн:</div>
											<div id="last-activity-time" class="fl_l"><? echo $last_activity;?></div>
											</div>
                                            <div class="settings_row_wrap">
                                                <div class="fl_l ta_r settings_label">История активности:</div>
												<a href="#more" rel="modal:open" id="last-activity-button" class="fl_l button button--chromeless">Показать</a>
												<div id="more" class="modal" style="display:none">
													<span id="modal-title">История активности вашего аккаунта</span>
													<div class="more">
														<div id="title-table"><span>Браузер</span>
														<span>Платформа</span>
														<span>IP-адрес</span>
														<span>Время</span></div>
														<div id="results"></div>
													</div>
												</div>
                                            </div>
										</li>
									</ul >


После html кода идут скрипты.
Ответить с цитированием
  #8 (permalink)  
Старый 03.03.2016, 07:52
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

grisha2217,
В исходном коде ошибка с кавычками. Для #last-activity-button в 3 строке и для #changepwd в 6. Запустил у себя на локальном сервере, никаких конфликтов собственно не заметил.

<ul class="tab-post-container text">
        <li class="settings_section">
            <h2>Смена пароля</h2>
            <div class="settings_row_wrap">
                <div class="fl_l ta_r settings_label">Старый пароль:</div>
                <div class="fl_l"><input type="password" id="settings_old_pwd"></div>
            </div>
            <div class="settings_row_wrap">
                <div class="fl_l ta_r settings_label">Новый пароль:</div>
                <div class="fl_l"><input type="password" id="settings_new_pwd"></div>
            </div>
            <div class="settings_row_wrap">
                <div class="fl_l ta_r settings_label">Повторите пароль:</div>
                <div class="fl_l"><input type="password" id="settings_confirm_pwd"></div>
            </div>
            <div class="settings_row_wrap">
                <div id="changepwd-box" class="fl_l ta_r settings_label"></div>
                <div class="fl_l">
                    <span id="changepwd" class="button primary">Изменить пароль</span>
                </div>
            </div>
        </li>
        <li class="settings_section">
            <h2>Последняя активность</h2>
            <div class="settings_row_wrap">
                <div class="fl_l ta_r settings_label">Последний онлайн:</div>
                <div id="last-activity-time" class="fl_l"><? echo $last_activity;?></div>
            </div>
            <div class="settings_row_wrap">
                <div class="fl_l ta_r settings_label">История активности:</div>
                <a href="#more" rel="modal:open" id="last-activity-button" class="fl_l button button--chromeless">Показать</a>
                <div id="more" class="modal" style="display:none">
                    <span id="modal-title">История активности вашего аккаунта</span>
                    <div class="more">
                        <div id="title-table">
                            <span>Браузер</span>
                            <span>Платформа</span>
                            <span>IP-адрес</span>
                            <span>Время</span>
                        </div>
                        <div id="results"></div>
                    </div>
                </div>
            </div>
        </li>
    </ul>

    <script>
        $(function(){

            $('#last-activity-button').click(function (e) {
                e.stopPropagation();
                e.preventDefault();
                var view = 'act=last_activity&user_id=<?php echo $_COOKIE["user_id"]; ?>&token=<?php echo $token; ?>&hash=<?php echo $hash; ?>'; //
                $.ajax({
                    type : "POST",
                    url : "ajax.php",
                    data: view,
                    success: function (view) {
                        alert('hello from last-activity');
                        $('#results').empty().append(view);
                    },
                    error: function(){
                        $('#results').empty().text(view);
                    }
                });
            });

            $('#changepwd').click(function (e) {
                e.stopPropagation();
                e.preventDefault();
                var old_pwd = $("#settings_old_pwd");
                var new_pwd = $("#settings_new_pwd");
                var confirm_pwd = $("#settings_confirm_pwd");
                var changepwd = 'act=changepwd&user_id=<?php echo $_COOKIE["user_id"]; ?>&old_pwd='+ old_pwd.val() +'&new_pwd='+ new_pwd.val() +'&confirm_pwd='+ confirm_pwd.val() +'&token=<?php echo $token; ?>&hash=<?php echo $hash; ?>'; //
                $.ajax({
                    type : "POST",
                    url : "ajax.php",
                    data: changepwd,
                    success: function (msg) {
                        alert('hello from change-pwd');
                        $('#changepwd-box').text(msg);
                    },
                    error: function(){
                        $('#changepwd-box').text(msg);
                    }
                });
            });
        });
    </script>
Ответить с цитированием
  #9 (permalink)  
Старый 04.03.2016, 23:00
Аспирант
Отправить личное сообщение для grisha2217 Посмотреть профиль Найти все сообщения от grisha2217
 
Регистрация: 04.11.2013
Сообщений: 40

destus, у меня опять срабатывает)
Когда я меняю act=last_activity, то в попап окне парсинг не происходит, а в блок #changepwd-box всё равно выводится результат функции смена пароля + результат функции last-activity, при этом подается неизвестное серверу значение 'act'. Будем копать.

== upd, я идиот.
В пхп файле было условие с одним знаком "равно" вместо двух(((
if ($_POST['act'] = 'last_activity') {

Последний раз редактировалось grisha2217, 04.03.2016 в 23:05.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
конфликтуют плагин стилизации с ajax запросом prohor.zotikov jQuery 15 30.10.2013 19:57
AJAX загрузка внешнего скрипта и переопределение documen.write для внешнего скрипта vl2013 AJAX и COMET 19 06.09.2013 19:59
Два скрипта конфликтуют. Нужна помощь! TaH4uk.pro jQuery 0 01.12.2012 20:47
Как приостановить выполнение скрипта до получения результата AJAX запроса? Хиросим AJAX и COMET 9 31.10.2011 10:56
Конфликтуют два скрипта Aydar_nv Работа 2 27.01.2011 11:13