【问题标题】:Execute Ajax call on user confirmation that should appear depending on a previous Ajax call根据先前的 Ajax 调用,在用户确认时执行 Ajax 调用
【发布时间】:2017-04-14 04:10:24
【问题描述】:

我正在处理一个关于异步调用的难题:

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

我想的结构是这样的

用户点击按钮:

  • Ajax -> 成功:真或假。
  • 如果为真 -> 提示用户 -> 重叠,要继续吗?
  • 如果是 -> Ajax -> 在数据库中写入内容。

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

【问题讨论】:

  • jQuery.ajax 有一个成功回调 - 把你的逻辑和后续的 ajax 调用放在那里 - I couldn't find a single solution - 你找不到一个,因为实际上有成千上万的解决方案?
  • 对不起,如果我让你生气了或其他什么,这是我在学校使用 javascript 的第一个项目,但我仍然对要问什么或要研究什么感到有点迷茫。不过感谢您的回复!

标签: javascript jquery ajax


【解决方案1】:

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]);

【讨论】:

  • 非常感谢您的回答,非常优雅的处理问题的方式!
【解决方案2】:

使用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);
});

基本上,您 POST 到您的检查 PHP 脚本中,它会返回 1 (true) 或 0 (false)。如果是真的,您确认您的用户想要继续。如果他们单击取消,它将退出该功能。如果他们确认或脚本返回 false,它将执行第二个 POST 到您的更新 PHP 脚本。

【讨论】:

    【解决方案3】:
    $.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} 如果失败。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2012-10-24
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多