首页 > JS 方法调用问题

JS 方法调用问题

script.js

var hsh = function(){

    function doAjax( _url, _method, _params, _datatype)
    {
        if(! $.isEmptyObject(_params))
        {   

            var _data = $.param(_params);

            $.ajax({

                type: _method,
                data: _data,
                url: _url,
                dataType: _datatype,
                success: function(data){

                    return data;
                }

            });
        }
        else
        {
            return "var params must not be empty";
        }

    }

    return {

        init: function(){

            $('[data-popover="true"]').popover({html: true});

            var uls = $('.sidebar-nav > ul > *').clone();
            uls.addClass('visible-xs');
            $('#main-menu').append(uls.clone());

            $("[rel=tooltip]").tooltip();

            $(".knob").knob();

        },//End.Init

        login: function(){

            _method = $("form").attr('method');
            _url = $("form").attr('action');
            _username = $.trim($("#username").val());
            _password = $("#password").val();

            $("#username").blur(function(){

                _url = $("form").data("haoling");

                var result = doAjax(_url, _method, {username : _username},'text');

                alert(result);
                // if(result.err_no == 0)
                // {
                //  $("#haoling-box").slideDown('slow');
                // }

            });

            $("#btn-login").click(function(){


            });

        }, //End.Login
    }

}();

alert(result); 返回的是undefined 但是ajax 已经执行! -_-|||


ajax 是异步的,var result = doAjax(_url, _method, {username : _username},'text');
你这样直接赋值肯定是不行的,要用异步回调的思路重构代码。。。


我猜你是想问

success: function(data){
    return data;
}

data咋没返回赋值给result

这里的return,是返回success: function(data)这个function的, 你的doAjax方法 if条件命中后执行一堆代码,没有任何返回值,所以 你调用doAjax的结果 就是 undefined

建议巩固一下语法知识


$.ajax({

            type: _method,
            data: _data,
            url: _url,
            dataType: _datatype,
            success: function(data){

                return data;
            }

        });
        这部分里面的return 。返回的是到doAjax函数的作用域内,而且是异步执行的;
        当你执行doAjax完毕这个函数的时候,ajax还没执行完毕,当你ajax执行完毕return到doAjax的作用域内的时候,doAjax的作用域已经消失了,你返回的值是无法返回给到result的。

        个人觉得还是作用域的问题。就算你在ajax内部把data赋值给result,后面再输出时也是没有的,因为是异步的。
        个人愚见,希望对你有用。也请各位大侠指点、
【热门文章】
【热门文章】