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
已经执行! -_-|||
黄舟2017-04-10 14:51:39
$.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,后面再输出时也是没有的,因为是异步的。
个人愚见,希望对你有用。也请各位大侠指点、
大家讲道理2017-04-10 14:51:39
我猜你是想问
success: function(data){
return data;
}
data
咋没返回赋值给result
?
这里的return,是返回success: function(data)
这个function的, 你的doAjax方法 if条件命中后执行一堆代码,没有任何返回值,所以 你调用doAjax
的结果 就是 undefined
建议巩固一下语法知识
高洛峰2017-04-10 14:51:39
ajax 是异步的,var result = doAjax(_url, _method, {username : _username},'text');
你这样直接赋值肯定是不行的,要用异步回调的思路重构代码。。。