[英]JQuery confirmation dialog after AJAX request
我需要在服务器端验证具有给定注册号的人是否已经在数据库中。 如果此人已经注册,那么我会正常进行程序流程。 但是,如果该号码尚未注册,那么我想显示一个确认对话框,询问运营商是否想要注册一个输入号码的新人,如果运营商回答是,那么该人员将在在提交的表格上通知的数字。
我试过了
服务器端(PHP):
if (!$exists_person) {
$resp['success'] = false;
$resp['msg'] = 'Do you want to register a new person?';
echo json_encode($resp);
}
客户端:
function submit(){
var data = $('#myForm').serialize();
$.ajax({
type: 'POST'
,dataType: 'json'
,url: 'myPHP.php'
,async: 'true'
,data: data
,error: function(response){
alert('response');
}
});
return false;
}
我甚至看不到警报,这就是我想要将确认对话框放在服务器端写的消息。 其他问题,如何重新提交附加操作员答案的整个表单,以便服务器可以检查答案是否为是注册这个新人?
编辑
我能够通过这种方式解决问题:
服务器端(PHP):
$person = find($_POST['regNo']);
if ($_POST['register_new'] === 'false' && !$person) {
$resp['exists'] = false;
$resp['msg'] = 'Do you want to register a new person?';
die(json_encode($resp)); //send response to AJAX request on the client side
} else if ($_POST['register_new'] === 'true' && !$person) {
//register new person
$person = find($_POST['regNo']);
}
if($person){
//proceed normal program flow
}
客户端:
function submit(e) {
e.preventDefault();
var data = $('#myForm').serialize();
var ajax1 = $.ajax({
type: 'POST'
, dataType: 'json'
, async: 'true'
, url: 'myPHP.php'
, data: data
, success: function (response) {
if (!response.exists && confirm(response.msg)) {
document.getElementById('register_new').value = 'true'; //hidden input
dados = $('#myForm').serialize(); //reserialize with new data
var ajax2 = $.ajax({
type: 'POST'
, dataType: 'json'
, async: 'true'
, url: 'myPHP.php'
, data: data
, success: function () {
document.getElementById('register_new').value = 'false';
$('#myForm').unbind('submit').submit();
}
});
} else if (response.success) {
alert(response.msg);
$('#myForm').unbind('submit').submit();
}
}
});
}
您的PHP似乎没有任何问题。
问题是(1)您正在错误回调中进行警报,并且您的请求没有失败,因此您看不到警报。 (2)您正在警告字符串'response'
而不是变量response
。
值得注意的是,您应该使用.done()
和.fail()
promise方法( http://api.jquery.com/jquery.ajax/#jqXHR )。
这是固定的JS:
function submit() {
var data = $('#myForm').serialize();
// Same as before, with the error callback removed
var myAjaxRequest = $.ajax({
type: 'POST',
dataType: 'json',
url: 'myPHP.php',
async: 'true',
data: data
});
// The request was successful (200)
myAjaxRequest.done(function(data, textStatus, jqXHR) {
// The data variable will contain your JSON from the server
console.log(data);
// Use a confirmation dialog to ask the user your question
// sent from the server
if (confirm(data.msg)) {
// Perform another AJAX request
}
});
// The request failed (40X)
myAjaxRequest.fail(function(jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
});
return false;
}
此外,您在PHP中设置'status'并在JS中检查(我推测)。 您要做的是从服务器设置HTTP状态代码,如下所示:
if (!$exists_person)
{
$resp['msg'] = 'Do you want to register a new person?';
// 400 - Bad Request
http_response_code(400);
echo json_enconde($resp);
}
然后,jQuery将根据您回复的状态代码确定请求是否失败。 200
是成功的请求, 400
号码失败。
查看此页面以获取完整列表: https : //httpstatuses.com/
好的,这是一个两部分的问题; 我会尽力回答这两个部分:
第1部分 :如何检测成功是否为假并触发确认弹出窗口?
在jQuery.ajax中,基于响应代码触发错误处理程序。 这可能不是你想要的。 您可以使用成功处理程序并测试值res.success
以查看它是true还是false。 这将是:
function submit(e) {
e.preventDefault();
var data = $('#myForm').serialize();
$.ajax({
type: 'POST',
dataType: 'json',
url: 'myPHP.php',
async: 'true',
data: data
}).done(function(res) {
if (!res.success) {
alert(res.msg);
}
});
}
第2部分 :如何通过确认重新提交?
使用我们之前的代码,我们将进行一些更改,允许submit()
传递一个参数registerNew
。 如果registerNew
为true,我们将它作为参数传递给PHP中的ajax处理程序,因此它知道我们想要注册一个新人。 Javascript看起来像这样:
function submit(e, registerNew) {
if (e) e.preventDefault();
var data = $('#myForm').serialize();
var ajax_options = {
type: 'POST',
dataType: 'json',
url: 'myPHP.php',
async: 'true',
data: data
};
ajax_options.data.register_new = !!registerNew;
$.ajax(ajax_options).done(function(res) {
if (!res.success && confirm(res.msg)) {
submit(null, true);
}
});
}
正如您在此处看到的,我们在ajax选项中的数据中传递了一个新的register_new
参数。 现在我们需要在PHP端检测到这一点,这很容易看起来像这样(这在你的php ajax处理程序中):
if ($_POST["register_new"]) {
// new user registration code goes here
} else {
// your existing ajax handler code
}
在提交功能中添加确认
function submit(){
var data = $('#myForm').serialize();
if (confirm('Are you ready?')) {
$.ajax({
type: 'POST'
,dataType: 'json'
,url: 'myPHP.php'
,async: 'true'
,data: data
,error: function(response){
alert('response');
}
});
}
return false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.