#jquery #ajax #twitter-bootstrap #validation
#jquery #ajax #twitter-bootstrap #проверка
Вопрос:
У меня есть эта форма входа, в которой я выполняю проверку на стороне сервера, и теперь я пытаюсь выполнить проверку jQuery.
фрагмент формы:
<div class="form-actions">
<button type="submit" class="btn green pull-right">Login <i class="m-icon-swapright m-icon-white"></i></button>
</div>
Фрагмент jQuery: (Я использую bootstrap login.js )
submitHandler: function (form) {
var un = $('#usernameEmail').val();
var p = $('#pass').val();
$.ajax({
url: '/admin/checkIfUsernameOrEmailExists',
type: 'POST',
data: {un: un, pass: p},
success: function(data){
form.submit();
},
error: function(data){
alert("Error");
}
});
}
функция checkIfUsernameOrEmailExists
работает отлично. Я выполняю console.log(data)
функцию успеха (потому что она всегда срабатывает), и данные являются false, когда они должны быть false, и true, когда должно быть true. Итак, учитывая эту ситуацию, я не понимаю, где может быть ошибка.
Редактировать
Я пробовал это раньше без успеха, теперь я точно знаю, что теоретически это правильно, как предложили Рамеш и Кьюн… но все еще не работает, возможно, я что-то не так и не понимаю? Ошибки не отображаются, вход в систему не выполняется console.log
и предупреждение не отображается.
submitHandler: function (form) {
var un = $('#usernameEmail').val();
var p = $('#pass').val();
$.ajax({
url: '/admin/checkIfUsernameOrEmailExists',
type: 'POST',
data: {un: un, pass: p},
success: function(data){
if (data) {
form.submit()
}else{
// console.log(data);
alert(data);
};
},
error: function(data){
alert("Error");
}
});
}
РЕШЕНИЕ
Как сказал Blurfus, мне не хватало «» итак, внутри функции success сравнение данных должно проводиться со строкой:
success: function(data){
if (data == "true") {
form.submit()
}else{
alert(data);
};
},
Комментарии:
1. функция успеха вызывается, когда запрос выполнен успешно. он ничего не знает о вашей бизнес-логике.
2. @keune Теперь я знаю. Спасибо за совет. В любом случае, как я уже говорил Рамешкотхе, это работает, когда все успешно и пользователь может войти в систему. Но если это неправильно, предупреждение msge не отображается
3.если
data
это объект, или массив, или что-либо другое, что является истинным (например, строка"false"
), он отправит форму.4. @KevinB в самом деле? и каков правильный способ показать, когда это значение равно false? : s
5. возвращает строковое представление объекта в формате json, у которого есть флаг, такой как
{ "success": false }
, а затем устанавливает тип данных в json.if (data.success) { do stuff }
в качестве альтернативы вы могли бы заставить ваш сервер возвращать код состояния, отличный от 2xx.
Ответ №1:
Если я правильно понимаю документацию, вам нужно сделать это в вашей success
функции обратного вызова
success: function(data, status, jqXHR){
...
}
Да, я знаю, что два других являются необязательными, но в соответствии с сигнатурой функции:
Function(PlainObject data, String textStatus, jqXHR jqXHR )
Data
это объект, возвращаемый с сервера, отформатированный в соответствии с dataType
параметром (который вы не указали) и возможными значениями которого являются xml, json, script, or html
— Однако он пытается использовать интеллектуальное предположение. Итак, другими словами, он не очень хорошо обрабатывает логическое значение as data
(вообще?).
Мое лучшее предположение заключается в том, что вам придется сверяться с String
подобным:
if(data == "TRUE"){
form.submit();
}else{
alert('Error');
}
и, возможно, дополнительно укажите dataType
параметр.
Комментарии:
1. привет, спасибо за комментарий. Это сработало с тем, что сказали Рамеш и Кьюн, поместить логику в функцию success. Но благодаря вам я обнаружил, что проблема заключалась в том, что мне не хватало de «» в строке: if(data == «TRUE»)
Ответ №2:
Я думаю, что ваш checkIfUsernameOrEmailExists просто возвращает TRUE или FALSE. если он выдает какую-либо ошибку, то будет вызвана только ошибка jquery. В противном случае это приведет только к успеху. Если вы хотите выдать ошибку, установите флажок false в success и предупредите об этом.
$.ajax({
url: '/admin/checkIfUsernameOrEmailExists',
type: 'POST',
data: {un: un, pass: p},
success: function(data){
if(data){
form.submit();
}else{
alert('Error');
}
},
error: function(data){
alert("Error");
}
});
См .: jQuery Ajax
Комментарии:
1. Рамеш прав. Проверка jQuery на успешность заключается в том, прошел ли запрос AJAX успешно или нет. Данные, которые вы получаете обратно, не имеют значения.
2. Я делал это раньше и удалил его, потому что у меня это не сработало. Я знаю, что это правильная логика, но этот код для меня не работает. Ошибка предупреждения по-прежнему не отображается, что это может быть?
3. поместите консоль. регистрируйте данные и смотрите, что приходит, приходит как false или нет?
4. консоль @RameshKotha. log работает только тогда, когда это true, когда это false, это не так. Это странно, также не отображаются ошибки
5. если у вас есть firebug, он определенно показывает ошибку.