2013-12-11 2 views
-2

Привет у меня есть этот небольшой скрипт, который работает в то время как пользователь нажимает на «отправить»:остановка перегрузки сайта, а отправить мероприятие

$(document).ready(function(){ 
    $("form").submit(function(){ 

    var username = $("#username-field").val(); 
    if(username) { 
     $.ajax({ 
      url: 'check.php', 
      data: {data: JSON.stringify(username)}, 
      type: 'POST', 
      dataType: "json", 
      success: function (data) { 
       if(data.result == 0) { 
        alertify.error(data.error); 
        return false; 
       } 
      } 
     }); 
    } else { 
     alertify.alert("You forgot to type username"); 
     return false; 
    } 
    }); 
}); 

Когда я что-то типа в имени пользователя ввода-поле ..., то script "check.php" возвращает 0, но не отображается alertify.error.

Вместо отображения alertiy.error (data.error) страница перезагружается? Зачем? я устанавливаю «return false», поэтому его не следует ослабить.

НО: Если я не вводить ничего в поле ввода-поле, если придаточного становится ложным, и это работает:

} else { 
     alertify.alert("You forgot to type username"); 
     return false; 
    } 

Так почему же это работает, но Ajax-пример Aboth нет?

+0

Ajax является асинхронной ... –

ответ

0

Необходимо вернуть ложное значение за пределами вызова $.ajax, IIRC. Возврат обратного вызова - это не то же самое, что возвращаемое значение функции.

0

переместить значение false в конец, за пределами оператора if. вы хотите всегда возвращать false, поэтому логически нет смысла в том, что он находится внутри оператора if, потому что он не зависит от условия.

$(document).ready(function(){ 
    $("form").submit(function(){ 
    var form = this; 
    var username = $("#username-field").val(); 
    if(username) { 
     $.ajax({ 
      url: 'check.php', 
      data: {data: JSON.stringify(username)}, 
      type: 'POST', 
      dataType: "json", 
      success: function (data) { 
       if(data.result == 0) { 
        alertify.error(data.error); 
        //return false; 
       } 
       else { 
        form.submit(); 
       } 
      } 
     }); 
    } else { 
     alertify.alert("You forgot to type username"); 
     //return false; 
    } 
    return false; 
    }); 
}); 

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

1

Попробуйте этот фрагмент, следует устранить проблему:

$(document).ready(function() { 
    $("form").submit(function() { 
     var username = $("#username-field").val(); 
     if (username) { 
      $.ajax({ 
       context:this, //set context here 
       url: 'check.php', 
       data: { 
        data: JSON.stringify(username) 
       }, 
       type: 'POST', 
       dataType: "json", 
       success: function (data) { 
        if (data.result == 0) { 
         alertify.error(data.error); 
        } 
        else this.submit(); //submit form using DOM node property (not calling jq handler) 
       } 
      }); 
     } else { 
      alertify.alert("You forgot to type username");    
     } 
     return false; 
    }); 
}); 
+0

я сделал это именно так теперь, что происходит: скрипт возвращает 0, страница не перезагружается, но есть также нет сообщения об ошибке, почему? – user3080627

+0

@ user3080627 Вы хотите отправить FORM даже результат == 0 ??? Это не так, как я прочитал ваш начальный почтовый код –

+0

нет, когда результат == 0, чем отображать сообщение об ошибке и не отправлять – user3080627

Смежные вопросы