我正在处理有关异步调用的难题:
JQuery函数在用户点击时执行,然后调用php文件来检查用户输入是否与数据库中已有的信息重叠。 如果确实如此,则应提示用户确认是否要继续进行或取消,如果他点击确定,则会执行另一次调用以在数据库中写入数据。
我想的结构就像是
用户点击按钮:
问题是,我找不到一个可以让我这样做的解决方案。 任何帮助表示赞赏!
答案 0 :(得分:2)
的Javascript
$.ajax({
type: "POST",
url: 'your_url.php',
data: your_data
})
.success(handleResponse);
function handleResponse(data) {
if (data.request_overide) {
if (confirm('There is an overlap... Proceed?')) {
data.force = true;
$.ajax({
type: "POST",
url: 'your_url.php',
data: your_data
})
.success(handleResponse);
}
} else {
alert('Successfully added!')
}
}
PHP - your_url.php
$duplicate = false;
//Check if duplicate
if(!$_POST['force']){
$duplicate = somecheck();
}
if(!$duplicate){
addData();
}
echo json_encode(['request_overide' => $duplicate]);
答案 1 :(得分:1)
$.ajax({
type: 'POST',
data: { input: 'someInput' },
success: function(response) {
if (response.confirmation == 1)
//Do prompt
if (promptisSuccessful) {
//Do a second Ajax call
}
}
});
您的PHP代码应该返回一个json响应,例如
{confirmation:1}
如果验证或逻辑通过,{confirmation:0}
如果失败。
希望有所帮助
答案 2 :(得分:1)
使用jQuery.post()的方法:
/* check if the user input will overlap with information already in the database */
$.post('/path/to/check-database.php', dataObject, function(response) {
/* If it does - because JavaScript treats 0 as loosely equal to false (i.e. 0 == false) */
if(response != false) {
/* the user then should be prompted for confirmation if he wants to proceed anyway or cancel */
if(!confirm('It overlaps, want to proceed?')) { return false; } // cancels
}
/* Write stuff on database */
$.post('/path/to/update-database.php', dataObject);
});
基本上,你在检查PHP脚本中POST,它返回1(真)或0(假)。如果确实如此,您确认您的用户想要继续。如果他们单击取消,它将退出该功能。如果他们确认或脚本返回false,它将在您的更新PHP脚本中执行第二次POST。