我正在使用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 ......提前感謝!
你有一個異步,你正在對待它,因爲它是同步的。 – epascarello