我有一个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中的控制台显示没有错误,我缺少什么?
答案 0 :(得分:1)
done()中的data
变量是一个字符串。你必须将它转换为像这样的对象
var response = $.parseJSON(data);
以访问属性
答案 1 :(得分:0)
对不起,我在之前的回答中错过了dataType : "json"
代码
无论如何我尝试了你的代码并且它正在运行。 alert
显示消息。我认为你在其他地方有错误。我认为它与你编码为json的数组(PHP部分)有一些关系。你得到的回答并不完整。尝试调试PHP并与AJAX分开测试页面,看看结果是什么
答案 2 :(得分:0)
经过一些修补,我能够按照我想要的方式工作。这是更新后的代码。
<强>的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);
?>