我是Ajax和jquery的新手。我正在使用它们来设计一个Ajax表单.Below是我从谷歌获得的代码。
我有两个文件" form.php"和" process.php"即。 这是它遍历form.php的方式:这个表单用于获取值,如果用户无法输入数据,则必须显示它来自" process.php"说"这个字段是空的"。
最初,我从谷歌下载的原始版本只有一个输入字段 是"名称"。我通过添加另一个名为"密码"的字段来自定义表单。每当我点击"提交"显示空值的按钮"名称不能为空白"对于这两个领域。相反,它必须是"名称不能为空白"和"密码不能为空白"
以下是 form.php 的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Simple Ajax Form</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('form').submit(function(event) { //Trigger on form submit
//$('#name + .throw_error').empty(); //Clear the messages first
//$('#success').empty();
var postForm = { //Fetch form data
'name' : $('input[name=name]').val()
'password': $('input[name=password]').val()
};
//Store name fields value
$.ajax({ //Process the form using $.ajax()
type : 'POST', //Method type
url : 'process.php', //Your form processing file url
data : postForm, //Forms name
dataType : 'json',
success : function(data) {
if (!data.success) { //If fails
if (data.errors.name) { //Returned if any error from process.php
$('.throw_error').fadeIn(1000).html(data.errors.name);
}
else if(data.errors.password)
{
$('.throw_error').fadeIn(1000).html(data.errors.password);
}
}
else {
$('#success').fadeIn(1000).append(
'<p>' + data.posted + '</p>'
);
}
}
});
event.preventDefault(); //Prevent the default submit
});
});
</script>
<style>
ul {
font-family: Arial;
list-style-type: none;
}
#success {
display: none;
font-family: Arial;
color: green;
margin-left: 85px;
font-size: 14px;
}
input[type=text] {
padding: 5px;
box-shadow: inset 0 0 5px #eee;
border: 1px solid #eee;
}
input[type=submit] {
padding: 3px 8px;
background: #eee;
margin-left: 85px;
cursor: pointer;
border: 1px solid #aaa;
font-size: 12px;
}
.throw_error {
color:tomato;
font-size: 12px;
display: none;
}
label {
font-size: 13px;
}
</style>
</head>
<body>
<form method="post" name="postForm">
<ul>
<li>
<label for="name">Name</label>
<input type="text" name="name" id="name" />
<span class="throw_error"></span>
</li>
<li>
<label for="password">Password</label>
<input type="password" name="password" id="password" />
<span class="throw_error"></span>
</li>
</ul>
<input type="submit" value="Send" />
</form>
<div id="success"></div>
</body>
</html>
这是 process.php
<?php
$errors = array(); //To store errors
$form_data = array(); //Pass back the data to `form.php`
/* Validate the form on server side */
if(empty($_POST['name'])) { //Name cannot be empty
$errors['name'] = 'Name cannot be blank';
}
if(empty($_POST['password'])){
$errors['password'] = 'password cannot be blank';
}
if (!empty($errors)) { //If errors in validation
$form_data['success'] = false;
$form_data['errors'] = $errors;
}
else { //If not, process the form, and return true on success
$form_data['success'] = true;
$form_data['posted'] = 'Data Was Posted Successfully';
}
//Return the data back to form.php
echo json_encode($form_data);
答案 0 :(得分:0)
您的主要问题是您正在使用&#34;否则如果&#34;输入密码错误。如果前一个&#34; if&#34;确实。而只是使用两个ifs:
if(data.errors.name) {
...
}
if(data.errors.password) {
...
}
但这可能不会完全符合您的要求,因为您将直接替换&#34; .throw_error&#34;的内容。每一次,只有最新的错误将在&#34; .throw_error&#34;元件。相反,您希望确保只填充相关的错误容器。例如,给出以下标记:
<input name="name"/>
<div class="throw_error"></div>
<input name="password"/>
<div class="throw_error_password"></div>
你在JS:
//for name errors
$(".throw_error").html(data.errors.name);
// for password errors
$(".throw_error_password").html(data.errors.password);