2012-12-14 25 views
0

我正在使用jQuery的UI對話框在屏幕上繪製一個對話框(my-ui-dialog),並向用戶顯示一些<input>和其他控件。當用戶點擊對話框的OK按鈕時,我想讓UI對話框向我的服務器發送AJAX/JSON消息(通過getJSON),讓服務器處理該呼叫,然後在收到響應後關閉對話框服務器。然後用戶應該被重定向(通過window.location)到另一個網頁。jQuery getJSON在對話框關閉前沒有足夠的時間執行

這裏是我的代碼:

$("#my-ui-dialog").dialog({ 
    modal: true, 
    autoOpen: false, 
    height: 255, 
    width: 300, 
    buttons: { 
     "OK" : function() { 
      var f = $("#fizz").val(); 

      $.getJSON(
       "/myserver/do-something", 
       { 
        fizz: f 
       }, 
       function() { 
        $("#my-ui-dialog").dialog('destroy'); 
       } 
      ); 

      // When I leave this in the code works great. 
      // When I comment the alert out, the getJSON call never 
      // hits the server-side. 
      alert("Returned from the backend..."); 

      window.location = "/myserver/some-other-url" 
      $(this).dialog("close"); 
     }, 
     Cancel : function() { 
      $(this).dialog("close"); 
     } 
    } 
}); 

當我離開的那alert箱,並等待幾秒鐘(與繪製畫面alertbox),該getJSON方法似乎有足夠的時間來點擊服務器和返回。但是如果我註釋掉alert這個請求就不會碰到我的服務器。我可以通過在日誌文件的/myserver/do-something處添加一條日誌消息來告訴它。這也是一個Java Web應用程序,我沒有看到Tomcat收到請求的任何證據,並且在使用Firebug進行調試時看不到HTTP請求。所有這些都表明請求根本不會觸及服務器。

我在這裏有什麼選擇?我可以讓jQuery睡幾秒鐘嗎?這感覺像是一個醜陋的解決方案;必須有更好的方式來使用jQuery API ......提前感謝!

+1

你有一個異步,你正在對待它,因爲它是同步的。 – epascarello

回答

4

將您的對話框關閉,並在getJSON回調代碼window.location。這就是回調的原因。

+0

但是爲什麼甚至不會生成http請求呢? – MadSkunk

+0

@MadSkunk:它是,但是當頁面被卸載時請求被中止。 –