2016-11-30 69 views
1

我处理有关异步调用的一个难题出现:执行用户确认Ajax调用应根据先前的Ajax调用

一个jQuery功能在用户点击执行,然后调用一个PHP文件检查用户输入是否与已存在于数据库中的信息重叠。 如果确实如此,则应该提示用户确认是否要继续或取消,如果他单击确定,则会执行另一个调用以在数据库中写入数据。

我在想的结构是一样的东西

用户点击按钮:

  • 阿贾克斯 - >成功:true或false。
  • 如果为True - >提示用户 - >它重叠,想继续吗?
  • 如果是 - > Ajax - >在数据库上写东西。

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

+0

jQuery.ajax有一个成功回调 - 把你的逻辑和随后的Ajax调用在那里 - '我无法找到一个单一的解决方案' - 你找不到一个,因为有成千上万的解决方案? –

+0

对不起,如果我让你生气或什么的,这是我在学校使用javascript的第一个项目,我仍然对要问什么或要搜索什么有点失落。感谢您的回复! –

回答

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

非常感谢您的回答,非常优雅的处理问题的方式! –

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}如果失败。

希望它可以帮助使用jQuery.post()

1

方法:

/* 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脚本,并返回要么1(真)或0(假)。如果确实如此,则确认用户想要继续。如果他们点击取消,它将退出该功能。如果他们确认或脚本返回false,它将执行第二个POST到您的更新PHP脚本中。