0

在这个函数中:

  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功能?

4

1 回答 1

0

你不能这样做。Javascript中的事件系统是异步的,函数总是会在AJAX请求运行之前返回,并触发回调。

你应该找到另一种方法来做到这一点。ValidateForm必须重写调用的函数以考虑 JavaScript 的异步特性。想想它做了什么以及如何让它在约束中工作。

它是否向用户显示错误?如果是这样,请在回调函数中显示该错误。

它会使表单无效或阻止提交吗?如果是这样,请将其存储为全局变量或数据属性,您可以稍后在提交时查找。

于 2013-01-06T12:04:48.130 回答