Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Помогите исправить if() функцию


Автор: Serious2008 12.2.2012, 21:44
не могу понять почему вот так
Код

$.post("ajax.html", { id: rid, set: "chk"},
   function(data) {
if (data != ""){
   
    alert('Выберите категорию не имеющую детей');
    return false;
}
   });


не работает.
а вот так
Код

$.post("ajax.html", { id: rid, set: "chk"},
   function(data) {
if (data != ""){
   
    alert('Выберите категорию не имеющую детей');

}
   });
    return false;

работает.

Дело в том что мне нужно, чтобы если data вернула то он прервал выполнение скрипта, а в противном случае выполнять то что ниже по скрипту.
То что вдруг случайно data возвращает пустоту и поэтому не срабатывает, вероятность крайне мала. Это только если вдруг какой-нибудь злобный хакер перед тем как я нажимаю правит тот конец аякс скрипта и меняет с echo " "; на echo "";

Автор: $дмитрий 12.2.2012, 22:02
Цитата

не могу понять почему

В первом примере прерывается функция $.post, во втором ее обертка

Цитата

Дело в том что мне нужно, чтобы если data вернула то он прервал выполнение скрипта, а в противном случае выполнять то что ниже по скрипту.

Передавай метку, либо то что ниже засунь в функцию и при необходимости вызывай

Автор: Serious2008 12.2.2012, 22:21
Код

 var err_msgs = '';
$.post("ajax.html", { id: rid, set: "chk"},
   function(data) {
      if (data != "")
       {
           alert(data);
       err_msgs = "Выберите категорию не имеющую детей";
       }
   });
alert(err_msgs);
if (err_msgs != "")
    {
    
    return false;
    }

Преобразовал вот в такое.
Второй алерт был внутри второго ифа изначально.
Так вот. Вначале он выбивает пустое окно, а потом alert(data); А как мне бы хотелось. Чтобы он вначале $.post выполнял, а потом уже всё что ниже.

Автор: $дмитрий 13.2.2012, 00:21
Цитата

Вначале он выбивает пустое окно

Правильно, за счет асинхронной работы Ajax-а, скрипт не ждет, а выполняется дальше
Если хочешь выполнить синхронный запрос, воспользуйся методом $.ajax, с флагом async:false
Либо, все что ниже засунь в первый иф
Либо, все что ниже засунь в функцию, которую будешь вызывать в срабатывании первого ифа

Добавлено через 5 минут и 7 секунд
Что-то типа этого
Код

var err_msgs;
$.ajax({
    url:"ajax.html",
    data:{id: rid, set: "chk"},
    async:false, 
    success:function(data){
     if(data != ""){
         alert(data);
         err_msgs = "Выберите категорию не имеющую детей";
     }
    }
});
if(err_msgs){
    alert(error);
}

Автор: Serious2008 13.2.2012, 01:47
Код

var err_msgs = "";
$.ajax({
    url:"ajax.html",
    data:{id: rid, set: "chk"},
    async:false, 
    success:function(data){
     if(data != ""){
         err_msgs = "Выберите категорию не имеющую детей";
     alert(err_msgs);
     }
    }
});
if (err_msgs != "")
    {
         return false;
    }

вот такое получилось в конце-концов, если вдруг кому-нибудь понадобиться.

В моём случае это вешается на проверку валидатности введёных некоторых данных на форме. По нажатию кнопки submit

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)