Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 25.10.2012, 16:38
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

Решил проблему заданием синхронного запроса. Всё равно нельзя будет добавить страницу если alias существует, поэтому временное подвисание на пару секунд не играет никакого значения, иначе для чего вообще существует синхронный запрос?
function aliasExists(alias, args) {
	var ret;
	$.ajax({
		url: '/cp/ajax/alias_exists.php',
		data: {'alias': alias, 'args': args},
		async: false,
		dataType: 'json',
		type: 'GET',
		success: function(data, textStatus) {
			ret = data;
		}
	});
	return ret;
}
Ответить с цитированием
  #22 (permalink)  
Старый 25.10.2012, 16:51
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Сообщение от project1
иначе для чего вообще существует синхронный запрос?
Уж не для такого, поверь.
Через время поймёшь через какую ты задницу всё это делаешь, не в обиду, сам когда-то таким был, да и до сих пор остаюсь, в некоторых областях.
__________________
.
Ответить с цитированием
  #23 (permalink)  
Старый 25.10.2012, 16:57
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

Skipp,
Понимаю Просто пока я не вижу других путей, чтобы запретить дальшейшее выполнение кода, пока я не получу нужный мне ответ. Так как результат этого выполнения зависит от AJAX ответа...
Ответить с цитированием
  #24 (permalink)  
Старый 26.10.2012, 09:28
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Так callback функция как раз для этого нужна, она сделает всё что нужно именно после того как придёт ответ.
__________________
.
Ответить с цитированием
  #25 (permalink)  
Старый 26.10.2012, 10:15
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

У меня идёт проверка формы. И перед тем, как её запостить, обязательно нужно проверить наличие одного поля в базе. Если же я буду делать проверку в callback функции, то, пока выполняется запрос, дальнейший код проверки формы уже завершит действие и, если условия проверки будут удовлетворены (кроме наличия одного поля из базы), форма отправится и только потом сработает callback функция.

Последний раз редактировалось project1, 26.10.2012 в 10:18.
Ответить с цитированием
  #26 (permalink)  
Старый 26.10.2012, 10:23
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Так зачем тогда return?
function(){
    //Проверка формы, если всё верно отправляем запрос
    $.ajax(.....,function(data){
        //Все действия которые необходимо делать после получения ответа.
    })
}
__________________
.
Ответить с цитированием
  #27 (permalink)  
Старый 26.10.2012, 11:08
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

Просто я люблю распределять всё по функциям и не городить всё в одном месте. Поэтому проверку ссылки я вынес в отдельную функцию.
Придётся привести весь код:
//запускаю проверку по нажатии на ссылку
var form = $('form:first');
$('a[href*="/insert/"]').click(function(){
	var href = $(this).attr('href');
	if (checkForm(href)) {
		form.attr('action', href);
		form.submit();
	}
	return false;
});

function checkForm(href) {
	var ret = true, alias;
	$('input.must,textarea.must,select.must').each(function(){
		$(this).removeClass('input-error');
		if ($(this).attr('name') == 'alias') {
			alias = $(this).attr('value', this.value.replace(/\s|_/g, '-').replace(/-{2,}/g, '-').replace(/[^a-z-\dа-я]/gi, '').toLowerCase());
			if (href) {
				if (alias[0].value) {
					if (aliasExists(alias[0].value, getAssocArray(href))) {
						ret = false;
						$(this).addClass('input-error');
					}
				}
			}
		}
		if ($.trim(this.value) == '') {
			ret = false;
			$(this).addClass('input-error');
			$('#tabs').tabs({ selected: 0 });
		}
	});
	return ret;
}

function aliasExists(alias, args) {
	var ret;
	$.ajax({
		url: '/cp/ajax/alias_exists.php',
		data: {'alias': alias, 'args': args},
		async: false,
		success: function(data, textStatus) {
			ret = data;
		}
	});
	return ret;
}

Может это как-нибудь прояснит ситуацию...

Последний раз редактировалось project1, 26.10.2012 в 11:11.
Ответить с цитированием
  #28 (permalink)  
Старый 26.10.2012, 11:15
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

...
aliasExists(alias[0].value, getAssocArray(href), this)
...						

function aliasExists(alias, args, obj) {
	$.ajax({
		url: '/cp/ajax/alias_exists.php',
		data: {'alias': alias, 'args': args},
		success: function(data, textStatus) {
			if(!Boolean(data))
				$(obj).addClass('input-error');
		}
	});

}
__________________
.
Ответить с цитированием
  #29 (permalink)  
Старый 26.10.2012, 11:25
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

Это понятно...
Как я писал выше, пока запрос выполняется, остальной код ява скрипта пробежит до конца и форма запостится, так и не дождавшись ответа от сервера и вызова callback функции
Ответить с цитированием
  #30 (permalink)  
Старый 26.10.2012, 11:39
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

В общем, потом разберёшься.
__________________
.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Области видимости событий Turok Events/DOM/Window 3 14.08.2011 20:26
Непонятки с областью видимости переменной zeleniy Общие вопросы Javascript 7 18.04.2011 16:08
стили Css в зависимости от высоты активной области браузера Vladimir_Kl Javascript под браузер 3 23.03.2011 16:04
Как узнать находится ли DOM элемент в области видимости? phgrey Общие вопросы Javascript 4 22.03.2011 19:05
области видимости элементов zaytsewa jQuery 14 11.01.2011 16:49