[英]In what order does DOJO handles ajax requests?
在對話框中使用表單我在jsp中使用Dojo將表單保存在數據庫中。 使用dojo.xhrPost()完成該請求后,我正在發送另一個請求以更新下拉列表框,該框應包括剛剛保存的已添加表單對象,但由於某種原因,在保存表單之前執行了更新下拉列表的請求即使首先調用表單保存,也不會在數據庫中使用。 使用Firebug,我可以看到getLocations()請求在sendForm()請求之前完成。 這是代碼:
<button type="button" id="submitAddTeamButton" dojoType="dijit.form.Button">Add Team
<script type="dojo/method" event="onClick" args="evt">
sendForm("ajaxResult1", "addTeamForm");
dijit.byId("addTeamDialog").hide();
getLocations("locationsTeam");
</script>
function sendForm(target, form){
var targetNode = dojo.byId(target);
var xhrArgs = {
form: form,
url: "ajax",
handleAs: "text",
load: function(data) {
targetNode.innerHTML = data;
},
error: function(error) {
targetNode.innerHTML = "An unexpected error occurred: " + error;
}
}
//Call the asynchronous xhrGet
var deferred = dojo.xhrPost(xhrArgs);
}
function getLocations(id) {
var targetNode = dojo.byId(id);
var xhrArgs = {
url: "ajax",
handleAs: "text",
content: {
location: "yes"
},
load: function(data) {
targetNode.innerHTML = data;
},
error: function(error) {
targetNode.innerHTML = "An unexpected error occurred: " + error;
}
}
//Call the asynchronous xhrGet
var deferred = dojo.xhrGet(xhrArgs);
}
為什么會這樣呢? 有沒有辦法在第二個請求執行之前先完成第一個請求?
為了減少發生這種情況的可能性,我嘗試將xhrGet中的cache屬性設置為false,但結果仍然相同。
請幫忙!
就像Alex所說的,異步請求僅僅是-不保證它們的順序。 如果要保證他們的訂單, 可以根據需要使它們同步。 有一個選項sync: true
是的,我認為您可以與請求args一起發送。 這將導致瀏覽器凍結,直到請求返回為止。因此,除非沒有其他選擇,否則建議不要這樣做,並且請求非常快。
您還可以提交所需的任何數據以及當前請求的數據。 例如,假設下拉列表A的值確定了下拉列表B中可用的列表選項。與其在更改下拉列表A時提交更改,然后刷新下拉列表B的選項,不如提交更改,而是在打開下拉列表B時提交A的值,並在確定B的選擇的服務器邏輯中進行處理。 (這假設您有一個下拉窗口小部件,其中包含服務器生成的選項,而不是標准標記。)
Ajax中的第一個A表示“異步”,這意味着事情以“自己的速度”發生:很有可能按照您期望的順序發送請求,但是它們的完成卻完全相反,因為第二個請求更快。 是的,當然,您甚至可以等待甚至開始 (發送)第二個請求,直到第一個請求完成為止-最簡單的是,您可以將第二個請求的開始放在第一個請求的回調函數中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.