2016-11-30 66 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腳本中。