У меня возникла проблема с FormData
, она работала пару дней назад, но теперь она не работает, она отправляет все входные данные, кроме кнопки отправки. Вот моя форма входа.
<form action="" method="post" name="login_user"> <label for="username">Username/e-mail <span class="error" id="user-error"></span></label> <input type="text" name="username" id="username" required> <br> <label for="passwd">Password <span class="error" id="passwd-error"></span></label> <input type="password" name="passwd" id="passwd" required> <br> <p><input type="checkbox" checked name="remember"> Remember me <span class="forgot"><a href="<?php echo SITE_URL; ?>/reset">Forgotten password</a></span> </p> <input type="submit" id="login" value="Login" name="login"> <p>Don't have an account? <a href="<?php echo SITE_URL; ?>/register/">Sign up</a></p> </form>
JS для входа в систему, использует MVC.
//ajax login var login = document.forms.namedItem('login_user'); if (login) { login.addEventListener('submit', function (e) { if (validatePassword('passwd', 'passwd-error')) { var data = new FormData(login); var userlogin = new XMLHttpRequest(); var btn = document.getElementById('login'); btn.value = 'Login, Please wait...'; userlogin.open('POST', url + 'login/login_user_ajax', true); userlogin.onload = function (event) { if (userlogin.status == 200) { var result = JSON.parse(userlogin.responseText); if (result.results == 'success.') { alert('logged in'); //change this later } else { document.getElementById('cred-error').innerHTML = result.results; } btn.value = 'Login'; } }; userlogin.send(data); } e.preventDefault(); }, false);
Метод входа в мой контроллер, кнопка не обнаружена.
public function login_user_ajax() { $this->login_user(1); } private function login_user($ajax = '') { if (filter_has_var(INPUT_POST, 'login')) { $new_user = $this->model('User'); $new_user->setDb(Controller::getDb()); $new_user->set_site(SITE_URL); $user = trim(filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING)); $passwd = trim(filter_input(INPUT_POST, 'passwd', FILTER_SANITIZE_STRING)); if ($new_user->login($user, $passwd)) { if ($ajax) { $site_data['results'] = 'success.'; echo json_encode($site_data); return true; }else { $this->redirect(SITE_URL . '/edit'); } } else { if (!$ajax){ return 'The username or password is incorrect.'; }else { $site_data['results'] = 'The username or password is incorrect.'; echo json_encode($site_data); return false; } } }else { print_r($_POST); } }
Я получаю это, когда у меня print_r
$_POST
, без кнопки.
Поскольку вы фактически не используете отправную страницу по умолчанию (вместо этого вы делаете ajax), вам нужно добавить кнопку щелчка самостоятельно. Один простой способ сделать это – добавить скрытый ввод в вашу форму с именем, которое вы хотите, чтобы кнопка имела, а затем все кнопки в форме используют этот обработчик кликов:
function clickHandler() { this.form.theHiddenInput.value = this.value; }
Таким образом, если для отправки формы использовалась кнопка, обработчик кнопки устанавливает значение скрытого ввода до submit
.