jQuery AJAX成功问题

时间:2013-04-02 16:19:18

标签: jquery

以下代码片段返回“失败”警告框,即使表单填写正确,我想显示“已通过”警告框。 当然有一些错误,但我可以找到...

此处的完整代码:http://alessandrosantese.com/Forms/Custom_Validation/Form-Validation-Plugin-AJAX.html

    submit.click(function(evt) {  
        evt.preventDefault();

        validate_form();

        $('form input:not(.submit, .email, .test)').each(function(){
            if ($(this).val() == '') {
                add_color($(this), red);
            }
            else {
                add_color($(this), white);
            }

        });

        var data = form.serialize();

            // AJAX call
            $.ajax({
                url: 'process.php',
                type: "post",
                data: data,
                success: function(r){

                    if (r.success) {
                        alert('passed');
                    } else {
                        alert('failed');
                    }

                }
            });



    });

PHP代码(非常基本,现在只是为了让AJAX成功运行)

<?php

    $name = $_POST['f_name'];
  $l_name = $_POST['l_name'];
  $email1 = $_POST['email'];
  $email2 = $_POST['email_c'];
     $tel = $_POST['tel'];
$postcode = $_POST['postcode'];
     $url = $_POST['url'];
     $checkbox = $_POST['checkbox'];

echo "\n$name\n$l_name\n$email1\n$email2\n$tel\n$postcode\n$url\n$checkbox";


?> 

我需要找到一种方法来确保validate_form();在AJAX调用之前工作。

4 个答案:

答案 0 :(得分:1)

validate_form会返回任何内容吗?如果是这样,您可以在任何地方捕获函数validate_form()的返回值。

validate_form()必须返回一个布尔值,以指示表单是否有效。在您的每个功能中 - validateEmail()checkPostCode()checkURL()会根据这些字段是否有效返回布尔值。并将validate_form()重写为

function validate_form()
{ 
    return (validateEmail() && checkPostCode() && checkURL());
} 

我想你想要这样的东西:

if(validate_form()) //if the form is valid
{
    $.ajax({
        url: 'process.php',
        type: "post",
        data: data,
        success: function(r){
            alert('passed')
            },
        error: function(r){
            alert('failed: ' + r.statusText);
    });
}
else
{
      alert('failed');
}

答案 1 :(得分:0)

您没有返回JSON字符串,因此r永远不会有.success属性。你传回一个简单的字符串,所以也许你最好不要做

if (r <> '') {
   alert('success');
} else {
   alert('failed');
}

答案 2 :(得分:0)

最佳解决方案可能是存储要在数组中返回的信息;然后在回复它之前使用json_encode()

将AJAX脚本的PHP部分更改为:

$return = array();
$return['name'] = $_POST['f_name'];
$return['l_name'] = $_POST['l_name'];
$return['email'] = $_POST['email'];
$return['email_c'] = $_POST['email_c'];
$return['tel'] = $_POST['tel'];
$return['postcode'] = $_POST['postcode'];
$return['url'] = $_POST['url'];
$return['checkbox'] = $_POST['checkbox'];
$return['success'] = true;

echo json_encode($return);

然后将以r.nameofparam形式向您发送的格式将信息发送回jquery ...因此您可以使用

访问成功的价值

r.success

或带有

的网址的值

r.url

答案 3 :(得分:0)

尝试使用完成&amp;失败:

// AJAX call
$.ajax({
 url: 'process.php',
 type: "post",
 data: data
}).done(function() { alert("passed"); })
.fail(function() { alert("failed"); });