0

即使表单填写正确,以下代码片段也会返回“失败”警报框,我想显示“通过”警报框。肯定有问题,但我找不到哪里……

完整代码在这里: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

4 回答 4

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');
}
于 2013-04-02T16:29:21.500 回答
0

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

if (r <> '') {
   alert('success');
} else {
   alert('failed');
}
于 2013-04-02T16:22:23.023 回答
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.成功

或 url 的值

r.url

于 2013-04-02T16:27:38.910 回答
0

尝试使用完成并失败:

// AJAX call
$.ajax({
 url: 'process.php',
 type: "post",
 data: data
}).done(function() { alert("passed"); })
.fail(function() { alert("failed"); });
于 2013-04-02T17:14:47.910 回答