2016-06-28 125 views
0

假設我有一個名爲form.php的頁面。然後我點擊了一個名爲「添加按鈕」的按鈕。該按鈕觸發一個由jquery函數檢測到的事件。 jquery函數對add.php進行ajax調用。阿賈克斯在ajax調用後發送回PHP的響應

在add.php裏面,有代碼檢查數據庫中是否存在某個特定的記錄。如果它確實發現該記錄存在,我想要執行以下操作。

  • 發送一個響應字符串「存在」給ajax。
  • .done()函數中的ajax將執行一條提示,指出「此記錄已存在,是否希望保持正確」?
  • 如果用戶取消了提示,則不會再發生任何事情,應該完成ajax調用。
  • 如果用戶點擊「確定」,我希望通知php腳本並使用form.php中的數據執行更新語句。

我懷疑這是不可能的,因爲在收到來自php的響應之後,AFAIK沒有辦法讓ajax迴應當前正在執行的php腳本。

我是對的還是有辦法做到這一點?

回答

0

您的第一個ajax調用的.done()函數在ajax調用成功完成時執行,所以當您的php腳本完成時。

如果你想做別的事情,你需要做一個新的Ajax請求。這可能是相同或另一個腳本,發送不同的/新的/額外的參數。

請注意,您必須確保在第一個腳本沒有完成第一個腳本的情況下才能調用第二個腳本,例如通過設置和檢查即將到期的會話變量。

1

你必須添加一個參數到你的ajax請求,如overridetruefalse。默認情況下/第一個請求你將它設置爲false。然後add.php是默認的,並返回exists

用戶做出他的決定。如果他想覆蓋,請將override參數再次發送到true。你的add.php會注意到這個參數並做它所要做的一切。

把你的ajax處理程序包裝成一個完成回調函數。因此,您可以根據需要隨時重複使用請求。很容易,沒有雙重代碼需要以及...

+0

您應該不應該依賴javascript,因爲訪問者可以直接使用'override'參數進行發佈。 – jeroen

+0

這仍然是腳本以及在哪裏使用。 add.php應該有安全功能來檢查一切。用戶有決定覆蓋它,所以選擇已經由用戶... – eisbehr

+0

是的,但正如我所說,*可能*;我只是傾向於儘可能多地在服務器端保留這些檢查以避免潛在的問題:-) – jeroen

0

你可以做這樣的事情。

$.post('add.php',$(this).serialize()) 
.done(function(result){ 
var r = confirm("This record already exist, do you wish to overright"); 
if(result == 'exist'){ 
     if (r == true) { 
     $.post('update.php',$(this).serialize()).done(function(r){ 
      console.log(r); 
     }); 
    } else { 
     return false; 
    } 
}else{ 
    console.log(result) 
} 

});