您好我正在尝试制作HTML表单,并且需要在执行表单操作之前对其进行验证。但AJAX响应总是返回一条空白消息?
$(function(){
$("#ajax-payment-form input[type='submit']").click(function(e) {
// Prevent form submission
e.preventDefault();
// Serialize data, make AJAX call
var str = $(this).serialize();
$.ajax({
type: "POST",
url: templateDir+"/payment_form/payment_process.php",
data: str,
context: this
}).done(function(msg) {
if(msg == 'OK') {
console.log('Validation passed, will submit form');
$(this).closest('form').submit();
} else {
console.log(msg);
}
}).fail(function() {
// Catch ajax errors here
console.log('AJAX error');
});
});
});
PHP:
$post = (!empty($_POST)) ? true : false;
if ($post) {
$orderid = stripslashes($_POST['orderid']);
$amount = stripslashes($_POST['amount']);
$betingelser = stripslashes($_POST['betingelser']);
$error = ''; // Check ordreid
if (!$orderid) {
$error. = 'Venligst indtast dit ordreid.<br />';
} // Check amount
if (!$amount) {
$error. = 'Venligst indtast et beløb.<br />';
}
if (!$error) {
echo 'OK';
} else {
echo '<div class="notification_error">'.$error.
'</div>';
}
}
谁能告诉我什么错?
答案 0 :(得分:1)
您位于click
按钮的submit
处理程序中。您正在调用$(this).serialize()
,其中this
是提交按钮。在提交按钮上调用序列化将返回一个空字符串。
因此,您没有将任何数据传递给服务器。您在服务器端执行的第一件事是检查empty($_POST)
,它将,因此if ($post)
为false,并且您的服务器端代码都没有执行。< / p>
您需要序列化表单,而不是提交按钮。
一个简单的解决方案是序列化表单本身....
str = $('"#ajax-payment-form').serialize()
但实际上,更大的问题是您要绑定到提交按钮的click
,而不是绑定到表单上的submit
事件。
而不是处理表单提交的这种相当复杂的方式......
$("#ajax-payment-form input[type='submit']").click(function(e) {
这样做:
$("#ajax-payment-form").submit(function (e) {
答案 1 :(得分:-2)
在jquery中尝试这个:
$.ajax({
type: "POST",
url: templateDir+"/payment_form/payment_process.php",
data: str,
context: this,
success: function(msg){
if(msg == 'OK') {
console.log('Validation passed, will submit form');
$(this).closest('form').submit();
}
else {
console.log(msg);
}
}
error: function(msg){
// if call fails or any error occurs
}
});