jQuery AJAX响应总是返回空白消息

时间:2014-10-25 20:55:24

标签: javascript jquery html ajax validation

您好我正在尝试制作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>';
  }
}

谁能告诉我什么错?

2 个答案:

答案 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
}
});