25.10.2012, 16:38
|
Интересующийся
|
|
Регистрация: 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;
}
|
|
25.10.2012, 16:51
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
Сообщение от project1
|
иначе для чего вообще существует синхронный запрос?
|
Уж не для такого, поверь.
Через время поймёшь через какую ты задницу всё это делаешь, не в обиду, сам когда-то таким был, да и до сих пор остаюсь, в некоторых областях.
__________________
.
|
|
25.10.2012, 16:57
|
Интересующийся
|
|
Регистрация: 06.10.2011
Сообщений: 24
|
|
Skipp,
Понимаю Просто пока я не вижу других путей, чтобы запретить дальшейшее выполнение кода, пока я не получу нужный мне ответ. Так как результат этого выполнения зависит от AJAX ответа...
|
|
26.10.2012, 09:28
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
Так callback функция как раз для этого нужна, она сделает всё что нужно именно после того как придёт ответ.
__________________
.
|
|
26.10.2012, 10:15
|
Интересующийся
|
|
Регистрация: 06.10.2011
Сообщений: 24
|
|
У меня идёт проверка формы. И перед тем, как её запостить, обязательно нужно проверить наличие одного поля в базе. Если же я буду делать проверку в callback функции, то, пока выполняется запрос, дальнейший код проверки формы уже завершит действие и, если условия проверки будут удовлетворены (кроме наличия одного поля из базы), форма отправится и только потом сработает callback функция.
Последний раз редактировалось project1, 26.10.2012 в 10:18.
|
|
26.10.2012, 10:23
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
Так зачем тогда return?
function(){
//Проверка формы, если всё верно отправляем запрос
$.ajax(.....,function(data){
//Все действия которые необходимо делать после получения ответа.
})
}
__________________
.
|
|
26.10.2012, 11:08
|
Интересующийся
|
|
Регистрация: 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.
|
|
26.10.2012, 11:15
|
|
.
|
|
Регистрация: 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');
}
});
}
__________________
.
|
|
26.10.2012, 11:25
|
Интересующийся
|
|
Регистрация: 06.10.2011
Сообщений: 24
|
|
Это понятно...
Как я писал выше, пока запрос выполняется, остальной код ява скрипта пробежит до конца и форма запостится, так и не дождавшись ответа от сервера и вызова callback функции
|
|
26.10.2012, 11:39
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
В общем, потом разберёшься.
__________________
.
|
|
|
|