Asp.net

jQuery Ajax呼叫 - 成功設置變數值[重複]

  • April 2, 2009

我有一個正在編寫的應用程序,它修改伺服器中記憶體對像上的數據。修改是通過基本上更新該對象的屬性的 ajax 呼叫執行的。當使用者完成工作時,我有一個基本的“保存更改”按鈕,允許他們保存數據並刷新記憶體的對象。

為了保護使用者,如果在對伺服器對象進行了修改(如果尚未保存)時嘗試離開頁面,我想警告他們。因此,我創建了一個名為 IsInitialized 的 Web 服務方法,該方法將根據是否保存更改返回 true 或 false。如果他們沒有被保存,我想提示使用者並給他們一個機會來取消他們的導航請求。

這是我的問題 - 雖然我的呼叫正常工作,但我似乎無法獲得 ajax 成功呼叫來在其回調函式上設置變數值。這是我現在擁有的程式碼。

  ////Catches the users to keep them from navigation off the page w/o saved changes...
window.onbeforeunload = CheckSaveStatus;
var IsInitialized;

function CheckSaveStatus() {

   var temp = $.ajax({
       type: "POST",
       url: "URL.asmx/CheckIfInstanceIsInitilized",
       data: "{}",
       contentType: "application/json; charset=utf-8",
       dataType: "json",
       success: function(result) {
           IsInitialized = result.d;
       },
       error: function(xmlHttpRequest, status, err) {
           alert(xmlHttpRequest.statusText + " " + xmlHttpRequest.status + " : " + xmlHttpRequest.responseText);
       }

   });

   if (IsInitialized) {
       return "You currently have unprocessed changes for this Simulation.";
   }
}

我覺得我可能試圖以不恰當的方式使用 Success 回調。如何在 Success 回調上設置 javascript 變數,以便我可以決定是否應提示使用者使用未保存的更改消息?

正如剛才所指出的,我正在進行非同步呼叫,這意味著在我的方法返回之前呼叫其餘程式碼。有沒有辦法使用那個 ajax 呼叫,但仍然擷取 window.onunload 事件?(不製作同步ajax)

由於您在解除安裝事件中需要此行為,因此您必須改為進行同步呼叫。但是,它可能會凍結瀏覽器視窗/選項卡,具體取決於呼叫需要多長時間,但是因為您實際上是在試圖阻止使用者關閉視窗……

添加async: false到您的 JSON 以進行同步呼叫。

引用自:https://stackoverflow.com/questions/709876