我有一個AJAX調用來檢查使用Dojo和PHP的用戶名的可用性。一切都很好,但是背後有一些事情發生了。每次我輸入一個單詞或在onBlur事件中,dojo都會發起兩次AJAX調用,有時甚至會發生三次。我讀了link,他們說它從v1.3開始就是固定的,我正在使用v1.7。我試着在setTimeout()
裏放入AJAX函數,並延遲了3秒,但仍然發生同樣的事情。如何防止並只做一個AJAX調用?dijit.form.ValidationTextBox調用validator函數兩次onBlur
var _username = new dijit.form.ValidationTextBox({
name : "{{ username.name }}",
type : "text",
required : true,
invalidMessage : message.invalid.username
}, "{{ username.id }}");
dijit.byId("{{ username.id }}").validator = fnUsernameAvailable;
function fnUsernameAvailable(a) {
if (a === "")
return false;
dojo.xhrPost({
url : "{{ site_url() }}/ajax/check_username_availability",
handleAs: "json",
content : {
username : a,
csrf_libtracking : fnCsrf()
},
load : function(data) {
_isAvailable = data.result;
}
});
return _isAvailable;
}
這可能與您的問題沒有任何關係,但我認爲您不會在_isAvailable中獲取任何內容,因爲您的xhrPost是異步的。您可以添加sync:true以使其同步,但您最好使用dojo.when或dojo.then ... – Philippe 2011-12-28 16:57:52