2013-09-13 4 views
3

Я новичок в Ajax и JQuery и хочу выполнить некоторую проверку на странице входа (используя Wordpress).jQuery Ajax - как продолжить подавать форму после проверки полей

Я использую этот код, чтобы поймать представить в форме входа ...

$("#login").submit(function (e) { 
    $.ajax({ 
     type: "post", 
     dataType: 'json', 
     url: ajax_login_object.ThemeFolder + "/log-in-script.php", 
     data: { 
      'user_login': user_login, 
       'user_pass': user_pass, 
       'action': 'login' 
     }, 
     success: function (data) { 
      if (data.succeeded == true) { 
       // JUST WANT TO SUBMIT THE FORM HERE 
       // tried return true.. no joy 
       // tried $("#login").submit() but just ends up with neverending loop 
       // tried document.href etc but lose the POST data 
       // tried nesting another ajax call but no joy 
       // ???? 
      } 
     } 
    }); 
    e.preventDefault(); 
}); 

В моем входе-script.php проверить несколько вещей. Например, если они не заполнили поле «Пароль», но их имя пользователя находится в базе данных, я сбрасываю их пароль. Если они не заполнили поле «Пароль», и их имя пользователя не находится в db, я зарегистрирую их.

Если они ввели имя пользователя и пароль, я просто хочу отправить форму нормально, но я боюсь, как это сделать. Я уверен, что мне не хватает чего-то очень простого.

Любая помощь действительно оценена.

Благодаря

John ;-)

+1

Вам нужно прикрепить 'Аякса()' вызов на другое событие, такое как нажмите кнопку, затем запустите 'submit()' в форме вручную. Теперь вы можете видеть, как вы заканчиваете цикл. –

+0

Зачем отделять эту логику от обычной формы? Кроме того, логика сброса пароля потенциально может быть плохой идеей .. люди просто забывают ввести свой пароль, и вы можете открыть себя для скриптов, которые сбросят пароль каждого пользователя. –

+0

Рори, не могли бы вы объяснить свой ответ немного больше для меня пожалуйста? Какое другое событие я могу использовать для инициирования вызова ajax? И что вы подразумеваете под «огонь submit() на форме вручную»? Извиняюсь за мое незнание этим. ;-) –

ответ

7

попробовать

$("#login")[0].submit() 

вызова submit() непосредственно на элементе формы, избежать вызов представить событие обратного вызова

DEMO: http://jsfiddle.net/5Xv5f/1/

UPDATE:

это верно для большинства браузера, а также для всех Gecko приложений:

https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.submit

onsubmit обработчик событий формы (например, onsubmit = "возвращают false;") не запускается при вызове этого метода из приложений на базе Gecko. В целом, это не гарантируется, что пользовательские агенты HTML могут быть вызваны.

Однако для этого не существует стандарта W3.

Так что, если вы хотите быть на 100% уверен, что вы можете сделать somethig так:

$("#login").submit(function (e) { 

    // submit if already checked 
    if($(this).attr("data-checked")) { 
      return true; 
    } 

    $.ajax({ 
     type: "post", 
     dataType: 'json', 
     url: ajax_login_object.ThemeFolder + "/log-in-script.php", 
     data: { 
      'user_login': user_login, 
       'user_pass': user_pass, 
       'action': 'login' 
     }, 
     success: function (data) { 
      if (data.succeeded == true) { 
       // JUST WANT TO SUBMIT THE FORM HERE 

       // flag as checked 
       $("#login").attr("data-checked","1"); 

       // submit 
       $("#login").submit()    
      } 
     } 
    }); 
    e.preventDefault(); 
}); 

DEMO http://jsfiddle.net/AEJ6S/

+0

Независимо от того, вызван ли он объектом jQuery или элементом DOM, событие такое же, что и не будет работать. –

+0

@RoryMcCrossan событие не запускается (http://jsfiddle.net/5Xv5f/) (или я не понимаю вопрос) –

+0

Это работает. Я ошибочно использовал #login (div, который содержит форму) вместо #loginform (фактическая форма). Спасибо вам за вашу помощь Rory и chumkiu ;-) –

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