jQuery Validate submitHandler 不显示响应


jQuery Validate submitHandler not displaying response

我有一个jQuery验证脚本,它与事件处理程序除外完美配合。出于故障排除目的,我简化了这篇文章。

jQuery

submitHandler: function (form) {
                $.ajax({
                    type: $(form).attr("method"),
                    url: $(form).attr("action"),
                    data: $(form).serialize(),
                    dataType : "json"
                })
                .done(function (data) {
                    if (data.resp > 0 ) {
                        alert(data.message);                       
                    }
                });
                return false; // required to block normal submit since you used ajax
            },
 // rest of the validation below, truncated for clarity

submitHandler 成功发布到我的 PHP 脚本,该脚本将用户添加到数据库,然后回显回显 json_encode() 结果。

.PHP

<?php
    // All processing code above this line has been truncated for brevity
    if($rows == "1"){
        $resp = array("resp"=>1, "message"=>"Account created successfully. Waiting for user activation.");
    }else{
        $resp = array("resp"=>2, "message"=>"User account already exists.");
    }
    echo json_encode($resp);
?>

如您所见,这个想法很简单。使用正确的响应消息提醒用户。当我运行脚本时,用户帐户已成功添加到数据库中,但没有向用户显示警报。Chrome 中的控制台未显示任何错误,我缺少什么?

done() 中的 data 变量是一个字符串。你必须把它转换成这样的对象

var response = $.parseJSON(data);

为了访问属性

很抱歉我在之前的回答中错过了您的代码中的dataType : "json".
无论如何,我尝试了您的代码并且它正在工作。alert将显示该消息。我认为您在其他地方有错误。我认为这与你编码为 json(PHP 部分)的数组有关。您得到的响应不完整。尝试调试您的PHP并与AJAX分开测试页面,看看结果如何

经过一番修补,我能够让事情按照我想要的方式进行。下面是更新的代码。

jQuery

.done(function (data) {
$("#user_add_dialog").dialog({
    autoOpen: false,
    modal: true,
    close: function (event, ui) {
    },
    title: "Add User",
    resizable: false,
    width: 500,
    height: "auto"
});
$("#user_add_dialog").html(data.message);
$("#user_add_dialog").dialog("open");
});
return false; // required to block normal submit since you used ajax

.PHP

<?php
    // All processing code above this line has been truncated for brevity
    if($rows == "1"){
        $resp = array("message"=>"Account created successfully. Waiting for user activation.");
    }else{
        $resp = array("message"=>"User account already exists.");
    }
    echo json_encode($resp);
?>