2013-01-06 147 views
0

在這個函數:函數 - 等待AJAX​​響應

function ValidateForm() 
    { 
     var ret = true; 

     if ($("#txtName").val().trim().length == 0) { ret = false; $('#txtName').effect("highlight", {}, 1000); } 
     if ($("#txtSurname").val().trim().length == 0) { ret = false; $('#txtSurname').effect("highlight", {}, 1000); } 
     if ($("#txtUserName").val().trim().length == 0) { ret = false; $('#txtUserName').effect("highlight", {}, 1000); } 
     else { 
      var pData = {}; pData["username"] = $("#txtUserName").val(); 
      $.ajax({ 
       url: 'service.aspx?/isusernameexist/', 
       dataType: 'json', 
       type: "POST", 
       data: pData, 
       success: function (data) { 

        if (data[0].cnt > 0) { 
         ret = false; $('#txtUserName').effect("highlight", {}, 1000); 
        } 

       } 
      }); 
     } 
     return ret; 
    } 

我試圖驗證表格前插入新的用戶,但檢查,如果用戶名是免費的使用採取了一些時間,我的功能ValidateForm()返回前值ajax請求結束。

如何在這種情況下正確實現ajax功能?

回答

0

你不能這樣做。 Javascript中的事件系統是非同步的,並且該函數將在AJAX請求運行之前始終返回,並觸發回調。

你應該找到另一種方法來做到這一點。調用ValidateForm的函數必須重新編寫,以考慮JavaScript的異步特性。考慮它的作用以及如何使它在約束條件下工作。

它是否向用戶顯示錯誤?如果是這樣,在回調函數中顯示該錯誤。

是否使表單失效或阻止提交?如果是這樣,請將其存儲爲全局變量或數據屬性,您可以稍後在提交時查找它們。