Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Ajax:返回的值未能超出成功范围_Ajax_Jquery - Fatal编程技术网

Jquery Ajax:返回的值未能超出成功范围

Jquery Ajax:返回的值未能超出成功范围,ajax,jquery,Ajax,Jquery,我这里有一个奇怪的问题(可能是愚蠢的问题) 在下面的代码中,我声明变量retVal,并将其赋值为null。 在代码成功执行后,我用返回值(msg.d)重新分配了它 它成功地显示了警报时的值(retVal+“divyanhs”)但是当我在alert(retVal+“divyans”再次)上尝试同样的方法时我得到空值 我知道我可以通过将“return retVal”放在success中来获得值,但我想知道为什么会发生这种情况,以及是否有方法在底部返回值 function getGrpParent()

我这里有一个奇怪的问题(可能是愚蠢的问题)

在下面的代码中,我声明变量retVal,并将其赋值为null。 在代码成功执行后,我用返回值(msg.d)重新分配了它

它成功地显示了警报时的值(retVal+“divyanhs”)但是当我在alert(retVal+“divyans”再次)上尝试同样的方法时我得到空值

我知道我可以通过将“return retVal”放在success中来获得值,但我想知道为什么会发生这种情况,以及是否有方法在底部返回值

function getGrpParent() {
var retVal = null;
var hidType = $('[Id$=hidType]').val();
var hidGpId = $('[Id$=hidSelectedId]').val();
if (hidType == 'gp') {
    var url = "../User/UserHierar.aspx/GetParentGroup";
    var option = {
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        url: url,
        data: JSON.stringify({ GroupId: hidGpId }),
        success: function (msg) {
            if (msg.d != "") {
                retVal = msg.d;
                alert(retVal + " divyansh");
            }
        },
        error: function (err) {
            alert('error');
        }
    };
    $.ajax(option);
}
alert(retVal + " divyansh again");
return retVal;
}

一个简单的解决方法是将变量retVal移到函数范围之外,使其成为全局变量。Jason正确指出的success函数是在自己的上下文中执行的,不在getGrpParent()的范围内

我希望这有帮助


另外,您应该让Jason创建一个答案并接受它。

Ajax是异步的。底部的
return
在ajax调用完成之前执行,因此success函数中的
return
实际上不会返回任何内容。您需要重新构造代码以使用回调或
延迟对象。