Ajax php 成功响应后未重定向
Ajax not redirecting after a successful response from php
我正在尝试在完成用户凭据验证后从登录页面重定向到主页。响应工作得很好。获得成功响应后,我想重定向到主页。我在客户端使用 Javascript,在服务器端使用 PHP。但成功响应没有到达 ajax.
Ajax 通话
$('#login-btn').click(function(e) {
if ($('#login-form')[0].checkValidity()) {
e.preventDefault();
$("#login-btn").html('<img src="images/tra.gif" /> Please Wailt..');
if ($('#Lemail').val() == '') {
$('#error-message').fadeIn().html('* Email is Required!');
setTimeout(function() {
$('#error-message').fadeOut('slow');
}, 5000);
} else if ($('#Lpassword').val() == '') {
$('#error-message').fadeIn().html('* Please enter password!');
setTimeout(function() {
$('#error-message').fadeOut('slow');
}, 5000);
} else {
$('#error-message').text('');
$.ajax({
url: 'actionlog.php',
method: 'POST',
data: $('#login-form').serialize() + '&action=login',
success: function(response) {
if (response === 'true') {
window.location = '../';
} else {
$('#logAlert').html(response);
}
}
});
}
}
});
});
PHP代码:
<?php
//Login Request
if (isset($_POST['action']) && $_POST['action'] == 'login') {
if (Input::exists()) {
$validate = new Validate();
$validation = $validate->check($_POST, array(
'email' => array('required' => true),
'password' => array('required' => true)
));
if ($validation->passed()) {
$user = new User();
//create Remember
$remember = (Input::get('remember') === 'on') ? true : false;
$login = $user->login(Input::get('email'), Input::get('password'), $remember);
if ($login) {
echo 'true';
}
}else{
foreach ($validation->errors() as $error) {
$user = new User();
echo $user->showMessage('danger',$error);
}
}
}
}
我需要帮助
尝试这样做:
$.ajax({
type: "POST",
url: 'actionlog.php',
data: $('#login-form').serialize()+'&action=login',
dataType: 'json',
beforeSend: function(){},
success: function(response){
window.location.href = '/';
},
error: function(){
console.log('You got an error');
}
});
如果您从服务器获得成功的响应,这应该有效。此示例暗示服务器将 return json,但您可以指定任何您喜欢的内容。
UPD:我的错。您可以同时使用 window.location 和 window.location.href。另外,在上面的示例中,我删除了 options
processData: false,
contentType: false,
因为如果您发送 FormData,就会使用它们。您可能需要考虑使用 FormData 并将其传递给 data :) 这在发送带有文件的表单时非常有用
使用 FormData 它将如下所示:
$(document).on('submit','.your-form-selector', function(e){
e.preventDefault();
var data = new FormData(this); // "this" is your form and includes all the form fields
$.ajax({
type: "POST",
url: 'actionlog.php',
data: data, // FormData goes here
dataType: 'json',
processData: false,
contentType: false,
beforeSend: function(){},
success: function(response){
window.location.href = '/';
},
error: function(){
console.log('You got an error');
}
});
});
您必须 trim 您的回应....有时从服务器收到的字符串包含空格.....这会导致问题无法重定向到其他页面。
$.ajax({
url: 'actionlog.php',
method: 'POST',
data: $('#login-form').serialize() + '&action=login',
success: function(response) {
if ($.trim(response) === 'true') {
window.location = '../';
} else {
$('#logAlert').html(response);
}
}
});
我正在尝试在完成用户凭据验证后从登录页面重定向到主页。响应工作得很好。获得成功响应后,我想重定向到主页。我在客户端使用 Javascript,在服务器端使用 PHP。但成功响应没有到达 ajax.
Ajax 通话
$('#login-btn').click(function(e) {
if ($('#login-form')[0].checkValidity()) {
e.preventDefault();
$("#login-btn").html('<img src="images/tra.gif" /> Please Wailt..');
if ($('#Lemail').val() == '') {
$('#error-message').fadeIn().html('* Email is Required!');
setTimeout(function() {
$('#error-message').fadeOut('slow');
}, 5000);
} else if ($('#Lpassword').val() == '') {
$('#error-message').fadeIn().html('* Please enter password!');
setTimeout(function() {
$('#error-message').fadeOut('slow');
}, 5000);
} else {
$('#error-message').text('');
$.ajax({
url: 'actionlog.php',
method: 'POST',
data: $('#login-form').serialize() + '&action=login',
success: function(response) {
if (response === 'true') {
window.location = '../';
} else {
$('#logAlert').html(response);
}
}
});
}
}
});
});
PHP代码:
<?php
//Login Request
if (isset($_POST['action']) && $_POST['action'] == 'login') {
if (Input::exists()) {
$validate = new Validate();
$validation = $validate->check($_POST, array(
'email' => array('required' => true),
'password' => array('required' => true)
));
if ($validation->passed()) {
$user = new User();
//create Remember
$remember = (Input::get('remember') === 'on') ? true : false;
$login = $user->login(Input::get('email'), Input::get('password'), $remember);
if ($login) {
echo 'true';
}
}else{
foreach ($validation->errors() as $error) {
$user = new User();
echo $user->showMessage('danger',$error);
}
}
}
}
我需要帮助
尝试这样做:
$.ajax({
type: "POST",
url: 'actionlog.php',
data: $('#login-form').serialize()+'&action=login',
dataType: 'json',
beforeSend: function(){},
success: function(response){
window.location.href = '/';
},
error: function(){
console.log('You got an error');
}
});
如果您从服务器获得成功的响应,这应该有效。此示例暗示服务器将 return json,但您可以指定任何您喜欢的内容。
UPD:我的错。您可以同时使用 window.location 和 window.location.href。另外,在上面的示例中,我删除了 options
processData: false,
contentType: false,
因为如果您发送 FormData,就会使用它们。您可能需要考虑使用 FormData 并将其传递给 data :) 这在发送带有文件的表单时非常有用
使用 FormData 它将如下所示:
$(document).on('submit','.your-form-selector', function(e){
e.preventDefault();
var data = new FormData(this); // "this" is your form and includes all the form fields
$.ajax({
type: "POST",
url: 'actionlog.php',
data: data, // FormData goes here
dataType: 'json',
processData: false,
contentType: false,
beforeSend: function(){},
success: function(response){
window.location.href = '/';
},
error: function(){
console.log('You got an error');
}
});
});
您必须 trim 您的回应....有时从服务器收到的字符串包含空格.....这会导致问题无法重定向到其他页面。
$.ajax({
url: 'actionlog.php',
method: 'POST',
data: $('#login-form').serialize() + '&action=login',
success: function(response) {
if ($.trim(response) === 'true') {
window.location = '../';
} else {
$('#logAlert').html(response);
}
}
});