在我眼里,js是极其丑陋的。
同时很佩服那些js开发者。
//用户名是否存在
function IsUsernameExist(username) {
    $.ajax({
        url: "/WebService/Account.asmx/IsUsernameExist", //这个方法现在返回的是字符串'true'或者'false'
        type: "post",
        data: "username=" + username,
        //async: false,
        dateType: 'json',
        success: function(result) {
            var exist = false;
            exist = result.d;
            //alert(result.d);
            return exist;
        }
    });
}
<script type="text/javascript">
    var IsUserNameExist = true;    function CheckUsername() {
        alert(IsUserNameExist);
        var username = $("#<%=Tb_UserName.ClientID %>").val();
        IsUserNameExist = IsUsernameExist(username);  //这个函数就是上面的函数 写在一个js文件里的
        alert(IsUserNameExist);
    }    $(document).ready(function() {
        $("#<%=Tb_UserName.ClientID %>").blur(function() {
            //alert(1);
            CheckUsername();
            //alert(2);
        });
    });
</script>

解决方案 »

  1.   

    方法现在返回的是字符串'true'或者'false'? dateType: 'json',
            success: function(result) {
                var exist = false;
                exist = result.d;
                //alert(result.d);
                return exist;
            }
    怎么能格式化成json呢? 
    把 /WebService/Account.asmx/IsUsernameExist 里的方法贴出来看看.
      

  2.   

    下面是webservice里的方法,返回结果为字符串"True"或者"False",我不知道是否可以返回bool类型true或者false。
    因为js可以识别字符串,所以我返回了字符串"True"或者"False"        /// <summary>
            /// 用户名是否存在
            /// </summary>
            [WebMethod]
            public string IsUsernameExist(string username)
            {
                string result = string.Empty;
                try
                {
                    bool re = false;
                    //...
                    //读取数据库,判断用户名是否存在,并将结果赋值给re
                    //...
                    if (re == true)
                    {
                        result = "True";
                    }
                    else
                    {
                        result = "False";
                    }
                }
                catch (Exception e)
                {
                    result = "True";
                }
                finally
                {
                }
                return result;
            }
      

  3.   

    顶楼的html里面,第二个alert(IsUserNameExist); alter出来的值为undefined。
      

  4.   

    ajax success里面出问题了
    result.d的值为undefined。
    dataType怎么写 什么json的 我快崩溃了
      

  5.   


    //用户名是否存在
    function IsUsernameExist() {
    var username = $("#<%=Tb_UserName.ClientID %>").val();
        $.ajax({
            url: "/WebService/Account.asmx/IsUsernameExist", //这个方法现在返回的是字符串'true'或者'false'
            type: "post",
            data: "username=" + username,
            //async: false,
            //dateType: 'json',
            success: function(result) {
                var exist = false;
                //exist = result.d;
                //alert(result.d);
                //return exist;
                exist = (result == "true");
                alert(exist);
                //成功后需要做的事情在这里做.
    CheckUsername(exist);
            }
        });
    }
    var IsUserNameExist = true;    function CheckUsername() {
            //alert(IsUserNameExist);
            //var username = $("#<%=Tb_UserName.ClientID %>").val();
            //IsUserNameExist = IsUsernameExist(username);  //这个函数就是上面的函数 写在一个js文件里的
            //alert(IsUserNameExist);
    alert(exist);
        }    $(document).ready(function() {
            $("#<%=Tb_UserName.ClientID %>").blur(function() {
                //alert(1);
                //CheckUsername();
                IsUsernameExist();
                //alert(2);
            });
        }); 因为是异步执行的,所有结果里面不会有返回值(不知道什么时候会返回值)帮你修改了代码,用这个代码执行就差不多了.ajax一般都是异步调用. 所以不设置返回值,如果需要对结果处理.就在他的success事件里面再处理.
      

  6.   

    明白了
    那我在ajax里面加上async: false,那就变成同步的了,是不是就可以返回值了?
      

  7.   

    加上async: false,会变成同步,但是程序会卡一下.等待ajax返回,'
    用户体验不好. 不建议这样.你的success是一个新方法, 返回的取不到.要在ajax的方法里面返回.
      

  8.   

    试试    dateType: 'html',
            success: function(result) {
              return eval(result.d);          //如果返回值是C#里的True或者False就先toLowerCase()再eval()就变为bool型了,JS同C#一样,须区分大小写
             }
      

  9.   

    前辈 ajax到底能不能返回值啊
    我在success里直接return 可以么?
    有个疑问:
    你上面的代码是在success里调用了函数CheckUsername(exist);
    但实际上CheckUsername() 这个函数是没有参数的,不知道这是jquery ajax里的特殊的调用方式还是你写错了?
      

  10.   

    用window.alert跟踪xmlHttp.readystate的变化,发现于原来它运行的机制是这样的
    首先创建一个xmlHttpRequest的对象之后xmlHttp.readyState的值是0了,
    然后xmlHttp.onreadystatechange = handlestatechange没有运行。
    紧接着是open(),这个函数发生了之后xmlHttp.readyState的值是1了,
    那么就会有一个断点在Open()函数处断开,保留现场,
    紧接着又返回到xmlHttp.onreadystatechange = handlestatechange运行,
    然后再执行Send()函数,这个函数发生了之后xmlHttp.readyState的值是2了,
    接着又返回到xmlHttp.onreadystatechange = handlestatechange运行。
    以此类推
      

  11.   

    关于能不能这样返回值,
    jq的文档里面写的.
    jQuery.ajax([options]) 返回值:XMLHttpRequestjQuery.ajax([options])function CheckUsername(){.....}
    呵呵,是缺少参数.  
    应该写成 function CheckUsername(exist){....}
      

  12.   

    所以,你的success返回值. 不能取到.
      

  13.   

    现在都用jquery封装好的ajax 底层的这些东西都不会了
      

  14.   

    json 格式  你返回应该是这样的一个字符串吧{"value":false}
    你那个.d是什么东西啊 而且webservice返回的东西好像是XML吧 我觉得你最好是用 流文件来做,而且要缓存设置成false
      

  15.   

    我看别人都是这样写的 好像默认的就是d 不知道对不对 求指教相当悲剧 js不给力
      

  16.   

    后台返回的不是"true“ or "false",而是{"d":"true"}or{"d":"false"}