注意:這是一個jQuery編碼練習,我不允許使用插件或其他模塊。jQuery ajax表單提交響應不會改變重新提交
我有一個jQuery表單被提交到一個php頁面。這個php頁面檢查電子郵件是否已被使用。如果沒有創建帳戶。
我不打算加入php頁面來降低複雜度。主要關注jQuery。
注:我使用的框架結構
HTML:
<div class="container">
<form id="myForm" action="validate_signup.php" method="post">
<div class="row">
<div class="twelve columns">
<h3 class="center">Sign Up</h3>
</div>
</div><!--end row-->
<div class="row">
<div class="four columns offset-by-four">
<input class="u-full-width" type="email" placeholder="Email" id="email" name="email">
<span class="error">Email not entered</span>
</div>
</div><!--end row-->
<div class="row">
<div class="four columns offset-by-four">
<input class="u-full-width" type="password" placeholder="Password" id="pword" name="pword">
<span class="error">Password not entered</span>
</div>
</div><!--end row-->
<div class="row">
<div class="four columns offset-by-four">
<input class="u-full-width" type="text" placeholder="First Name" id="fname" name="fname">
<span class="error">First Name not entered</span>
</div>
</div><!--end row-->
<div class="row">
<div class="four columns offset-by-four">
<input class="u-full-width" type="text" placeholder="Last Name" id="lname" name="lname">
<span class="error">Last Name not entered</span>
</div>
</div><!--end row-->
<div class="row">
<div class="six columns offset-by-four">
<input class="button-primary" type="submit" value="Submit" name="signup">
</div>
</div><!--end row-->
</form>
<div class="row">
<div class="twelve columns">
<p id="response" class="center no-display"></p>
</div>
</div>
</div><!--end container-->
<script src="../js/jquery.js"></script>
<script src="../js/signup.js"></script>
的jQuery:
// jQuery form validation
$(document).ready(function(){
// field mapping
var form_fields = {
'email' : 'email',
'pword' : 'password',
'fname' : 'first name',
'lname' : 'last name'
};
// ajax data
var ajaxData = {};
// make sure form fields were entered
$('#myForm').on('submit', function() {
for (var field in form_fields) {
if (!$('#' + field).val()) {
$('#' + field).next().addClass('error_show');
} else if ($('#' + field).val()) {
$('#' + field).next().removeClass('error_show');
ajaxData[field] = $('#' + field).val();
}
}
// signup post field to indicate to php submission
ajaxData['signup'] = 'Submit';
// send data if it is all there
if (Object.keys(ajaxData).length === 5) {
var request = $.ajax({
url : 'validate_signup.php',
method : 'POST',
data : ajaxData,
dataType : 'html'
});
request.done(function(response) {
$('#response')
.append(response)
.show('slow');
});
}
return false;
});
});
問題主要HTML行,其中的響應會打印爲:
<div class="row">
<div class="twelve columns">
<p id="response" class="center no-display"></p>
</div>
</div>
示例場景:
如果已經採取
Email already in use, please use another.
在電子郵件用戶類型獲取輸出。如果用戶修改條目,並重新提交形式的下獲得印刷:
Email already in use, please use another.sign up complete
我該如何解決這個問題,我與更新的響應刪除舊的響應數據?
謝謝!除了你的解決方案之外,我怎樣才能使得後續的重新提交能夠按照初始請求所做的那樣順利地用'show('slow')'打印出來,並且響應不會被分發出去。 –
如果沒有太多要求。 –
哈!謝謝!剛看到更新。 –