我看过类似的问题,但似乎没有人回答我正在寻找的问题。 验证脚本无法识别输入字段 - 因此会话未被传递。
代码如下:
var data = {};
$(document).ready(function() {
$('input[type="submit"]').on('click', function() {
resetErrors();
var url = 'process.php';
$.each($('form input, form select'), function(i, v) {
if (v.type !== 'submit') {
data[v.name] = v.value;
}
}); //end each
$.ajax({
dataType: 'json',
type: 'POST',
url: url,
data: data,
success: function(resp) {
if (resp === true) {
//successful validation
$('form').submit();
return false;
} else {
$.each(resp, function(i, v) {
console.log(i + " => " + v); // view in console for error messages
var msg = '<label class="error" for="'+i+'">'+v+'</label>';
$('input[name="' + i + '"], select[name="' + i + '"]').addClass('inputTxtError').after(msg);
});
var keys = Object.keys(resp);
$('input[name="'+keys[0]+'"]').focus();
}
return false;
},
error: function() {
console.log('there was a problem checking the fields');
}
});
return false;
});
});
function resetErrors() {
$('form input, form select').removeClass('inputTxtError');
$('label.error').remove();
}
html表格:
<form action="process.php" method="post" >
<label>First Name</label>
<input name="first_name" type="text" />
<label>Email</label>
<input name="email" type="text" />
<input type="submit" value="Submit" />
</form>
session_start() at top of page.
Process.php代码:
session_start();
if(isset($_POST)){
if (empty($_POST['first_name'])) {
$_SESSION['errors']['first_name'] = 'name is missing';
}
if (empty($_POST['email'])) {
$_SESSION['errors']['email'] = 'mail is missing';
}
if(count($_SESSION['errors']) > 0){
//This is for ajax requests:
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
echo json_encode($_SESSION['errors']);
exit;
}
//This is when Javascript is turned off:
echo '<ul>';
foreach($_SESSION['errors'] as $key => $value){
echo '<li>' . $value . '</li>';
}
echo '</ul>';exit;
}else{
//form validation successful - process data here!!!!
}
}
我是AJAX的新手(如你所见),所以非常感谢任何帮助。
答案 0 :(得分:0)
您必须为会话设置数组
if(isset($_POST)){
$_SESSION['errors'] = array();
if(empty($post['first_name']))
{
$_SESSION['errors'][] = "First name cannot be blank.";
}
....
}
问候/ SAQ
答案 1 :(得分:0)
您需要在调用session_start();
后立即将以下代码添加到Process.php的顶部,以便清除$_SESSION['errors']
数组中的先前值:
$_SESSION['errors']=Array();
答案 2 :(得分:0)
使用了下面的处理方法:
function validate()
{
var error="";
var name = document.getElementById( "first-name" );
if( name.value == "" )
{
error = " Please enter your first name. ";
document.getElementById( "error_para" ).innerHTML = error;
return false;
}
var name = document.getElementById( "surname" );
if( name.value == "" )
{
error = " Please enter your surname. ";
document.getElementById( "error_para" ).innerHTML = error;
return false;
}
var name = document.getElementById( "address1" );
if( name.value == "" )
{
error = " Please enter your address. ";
document.getElementById( "error_para" ).innerHTML = error;
return false;
}
var name = document.getElementById( "city" );
if( name.value == "" )
{
error = " We require your city too. ";
document.getElementById( "error_para" ).innerHTML = error;
return false;
}
var name = document.getElementById( "postcode" );
if( name.value == "" )
{
error = "Please enter your postcode ";
document.getElementById( "error_para" ).innerHTML = error;
return false;
}
var name = document.getElementById( "phone" );
if( name.value == "" )
{
error = " Please enter your contact phone number. ";
document.getElementById( "error_para" ).innerHTML = error;
return false;
}
else
{
return true;
}
}