根据先前的Ajax调用,应该出现的用户确认执行Ajax调用

时间:2016-11-30 00:17:50

标签: javascript jquery ajax

我正在处理有关异步调用的难题:

JQuery函数在用户点击时执行,然后调用php文件来检查用户输入是否与数据库中已有的信息重叠。 如果确实如此,则应提示用户确认是否要继续进行或取消,如果他点击确定,则会执行另一次调用以在数据库中写入数据。

我想的结构就像是

用户点击按钮:

  • Ajax - >成功:真或假。
  • 如果为True - >用户被提示 - >它重叠,想继续吗?
  • 如果是 - > Ajax - >在数据库上写东西。

问题是,我找不到一个可以让我这样做的解决方案。 任何帮助表示赞赏!

3 个答案:

答案 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。