ajax的return返回值为undefined

前端之家收集整理的这篇文章主要介绍了ajax的return返回值为undefined前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

解决的过程挺有意思的,看我这小白一步步的给大家呈现0.0
1、执行一个方法前需要做一个数据交互的校验,用了下ajax,发现返回值为undefined

/* 检查节点数*/
function checkNodeNum(id){
    $.ajax({
        url:@H_502_15@"${ctx}/ajaxCheckNodeNum?id="+id,type:@H_502_15@"post",dataType:@H_502_15@"json",data:{},success: function(data){
            var msg = data;
            if(msg!=@H_502_15@""){
                alert(msg);
                return false;
            }else{
                return true;
            }
        },error : function(){
            alert(@H_502_15@"启动失败!")
            that.attr(@H_502_15@"disabled",false);
            return false;
        }
    });

}

2、检查发现,ajax是在调用方法里面,所以决定返回值的还是方法外面,所以首先定义一个变量。此时返回值不再是undefined,但是此时始终返回false

function checkNodeNum(id){
    var isTrue = false;
    $.ajax({
        url:@H_502_15@"${ctx}/ajaxCheckNodeNum?id="+id,success: function(data){
            var msg = data;
            if(msg!=@H_502_15@""){
                alert(msg);
                isTrue =  false;// 1
            }else{
                isTrue = true;// 2
            }
        },false);
            isTrue = false;// 3
        }
    });
    return isTrue;// 4
}

3、debugger下,发现是因为提交url时,异步直接执行到了4,返回值就是默认的false,所以此时需要调整为先提交url,根据请求的返回值来决定返回true或者false,添加属性async。async:false表示同步,等待请求执行完成。

function checkNodeNum(id){
    var isTrue = false;
    $.ajax({
        url:@H_502_15@"${ctx}/ajaxCheckNodeNum?id="+id,async:false,success: function(data){
            var msg = data;
            if(msg!=@H_502_15@""){
                alert(msg);
                isTrue =  false;
            }else{
                isTrue = true;
            }
        },false);
            isTrue = false;
        }
    });
    return isTrue;
}

不要说你没看明白啊,难得你比我还白,水白水白的

原文链接:https://www.f2er.com/ajax/162600.html

猜你在找的Ajax相关文章