如何消除未捕获的TypeError?

时间:2012-01-24 00:23:42

标签: php jquery ajax

email.com使用此HTML代码:

    <form id="emailform" name="emailform" method="post" action="" >     
       <label>Name</label>
       <input type="text" name="name" />

       <label >Email</label>
       <input type="text" name="email" />

       <label >Message</label>
       <textarea name="message"></textarea>

       <div id="errormessage"></div>

       <input type="submit" value="send" class="button" />
       <input id="hiddenID" type="reset" name="hidden" />
</form>

使用此脚本:

$("#emailform").submit(function(){

                    $.ajax({
                        type: "POST",
                        url: "email.ajax.php",
                        data: $("#emailform").serialize(),
                        dataType: "json",

                        success: function(msg){
                            $("#errormessage").removeClass('error');
                            $("#errormessage").addClass(msg.status);
                            $("#errormessage").html(msg.message);
                            $("#hiddenID").click();

                        },
                        error: function(){
                            $("#errormessage").removeClass('success');
                            $("#errormessage").addClass('error');
                            $("#errormessage").html("There was an error submitting the form. Please try again.");
                        }
                    });
                    return false;
                });

和这个php:

<?php

function checkEmail($email){

        if(eregi("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $email)){
    return FALSE;
}

list($Username, $Domain) = split("@",$email);

if(@getmxrr($Domain, $MXHost)){
    return TRUE;

} else {
    if(@fsockopen($Domain, 25, $errno, $errstr, 30)){
        return TRUE; 
    } else {

        return FALSE; 
    }
}
}   


$response_array = array();

if(empty($_POST['name'])){
    $response_array['status'] = 'error';
    $response_array['message'] = 'Name is blank';
} elseif(!checkEmail($_POST['email'])) {
    $response_array['status'] = 'error';
    $response_array['message'] = 'Email is blank or invalid';
} elseif(empty($_POST['message'])) {
    $response_array['status'] = 'error';
    $response_array['message'] = 'Message is blank';
} else {
    $body = $_POST['name'] . " sent you a message\n";
    $body .= "Details:\n\n" . $_POST['message'];
    mail("email@email.com", "Portfolio", $body);

    $response_array['status'] = 'success';
    $response_array['message'] = 'Email sent!';

}


echo json_encode($response_array);

?>

我收到一条“未捕获的TypeError:无法读取null的属性'状态'错误”成功消息,似乎无法解释原因。它捕获名称错误,但然后不喜欢电子邮件验证。有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

以下是创建错误的行:$("#errormessage").addClass(msg.status);

您正在尝试访问status对象的msg属性,但错误告诉您msg不是对象,或者没有名为{{1}的属性}。

在回调函数的第一行上执行status,以查看实际返回到JavaScript的内容。

答案 1 :(得分:0)

尝试在echo之前添加:

header('Content-type: application/json');
echo json_encode($response_array);