Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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
Javascript can';t在第二个函数中返回变量_Javascript_Jquery_Sharepoint - Fatal编程技术网

Javascript can';t在第二个函数中返回变量

Javascript can';t在第二个函数中返回变量,javascript,jquery,sharepoint,Javascript,Jquery,Sharepoint,我对从sharepoint中提取用户名的代码有问题 如果我将return loginName更改为alert(loginName),则函数GetuserName()可以正常工作;然后我就调用这个函数 但我正试图收回该值并将其添加到arrVal数组中 但是,如果Ialert(GetUserName()),在测试警报时,它不起作用我得到一个未定义的alertbox。我猜我打错电话了,但我不确定 任何帮助都会非常有用 (document).on('click', '.genbutt', functio

我对从sharepoint中提取用户名的代码有问题

如果我将return loginName更改为alert(loginName),则函数
GetuserName()
可以正常工作;然后我就调用这个函数

但我正试图收回该值并将其添加到arrVal数组中

但是,如果I
alert(GetUserName()),在测试警报时,它不起作用我得到一个未定义的alertbox。我猜我打错电话了,但我不确定

任何帮助都会非常有用

(document).on('click', '.genbutt', function() {
    var $row = jQuery(this).closest('tr');
    var $columns = $row.find('td');

    $columns.addClass('row-highlight');
    var values = "";
    var arrVal = [];
    jQuery.each($columns, function(i, item) {
        values = values + item.innerHTML + " ";
        arrVal = values.split(" ");


    });

    alert(GetUserName());

});

function GetUserName() {
    var userid = _spPageContextInfo.userId;
    var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")";
    var requestHeaders = {
        "accept": "application/json;odata=verbose"
    };
    $.ajax({
        url: requestUri,
        contentType: "application/json;odata=verbose",
        headers: requestHeaders,
        success: onSuccess,
        error: onError
    });

    function onSuccess(data, request) {
        var loginName = data.d.Title;
        var emailName = _spPageContextInfo.userLoginName;
        return loginName;

    }

    function onError(error) {
        alert("error");
    }
}

AJAX调用是异步的,这就是为什么警报不会立即收到返回的值,因此它会显示未定义。您可以使用回调:

GetUserName((val) => {alert(val)})
并将您的GetUserName更改为

GetUserName(cb) {
   ... cb(loginName) ... //Instead of return
}

您的问题是ajax是异步的,getUserName()没有返回语句。您的return语句用于success上的
函数

您需要为GetUserName添加回调。警报在ajax返回结果之前执行。很抱歉,您能为我进一步充实一下吗?成功时我的ajax调用调用另一个函数onSuccess,该函数被支持,然后返回登录名,我将cb(loginName)放在哪个函数中?参见此示例,它使用超时代替ajax调用,但基本上是一样的,希望这有助于函数GetUserName(cb){setTimeout(onSuccess,1000);函数onSuccess(){cb(“Hi”)}}GetUserName((res)=>{alert(res);})谢谢你,但我现在明白了你原来的答案,在看了一下重复的问题回答后,我设法做了一个回拨工作,我想这就是你试图告诉我的。