我有一个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);
?>