Javascript can';t在第二个函数中返回变量
我对从sharepoint中提取用户名的代码有问题 如果我将return loginName更改为alert(loginName),则函数Javascript can';t在第二个函数中返回变量,javascript,jquery,sharepoint,Javascript,Jquery,Sharepoint,我对从sharepoint中提取用户名的代码有问题 如果我将return loginName更改为alert(loginName),则函数GetuserName()可以正常工作;然后我就调用这个函数 但我正试图收回该值并将其添加到arrVal数组中 但是,如果Ialert(GetUserName()),在测试警报时,它不起作用我得到一个未定义的alertbox。我猜我打错电话了,但我不确定 任何帮助都会非常有用 (document).on('click', '.genbutt', functio
GetuserName()
可以正常工作;然后我就调用这个函数
但我正试图收回该值并将其添加到arrVal数组中
但是,如果Ialert(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);})谢谢你,但我现在明白了你原来的答案,在看了一下重复的问题回答后,我设法做了一个回拨工作,我想这就是你试图告诉我的。