JavaScript Как я могу вернуть значение для Document.Write в CeWP с JavaScript
-
09-12-2019 - |
Вопрос
Я новичок в этом, и я просто пытаюсь понять, как использовать некоторые из JavaScript, которые я узнал по-разному. Это может быть вопрос контекста, но примеры или объяснения всегда очень ценятся, как я пытаюсь учиться.
У меня есть CEWP, ссылаясь на текстовый файл в библиотеке документов, которая содержит следующий скрипт. Это работает для оповещений, но я пытаюсь использовать документ. Написать для отображения результатов в CEWP.
<script type="text/javascript">
_spBodyOnLoadFunctionNames.push("loadScript");
function loadScript()
{
ExecuteOrDelayUntilScriptLoaded(findUser, 'sp.js');
}
function findUser()
{
cxt = new SP.ClientContext.get_current();
web = cxt.get_web();
this._currentUser = web.get_currentUser();
cxt.load(this._currentUser);
cxt.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod),
Function.createDelegate(this, this.onFailureMethod));
}
function onSuccessMethod(sender, args)
{
alert('Welcome ' + this._currentUser.get_title());
}
function onFaiureMethod(sender, args)
{
alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
}
</script>
.
Так что вышеперечисленные работы (хотя, вероятно, не будут использовать его, поскольку он отображает добро пожаловать каждый раз, когда нагрузки страницы), но я все еще изучаю и использую его, чтобы помочь выяснить синтаксис / и т. Д., И мне нужно что-то вроде документа. Чтобы написать значение обратно в CEWP. Я не могу понять, как использовать это и вызывать любую из функций и получить возвращение стоимости и попробовал кучу вещей, которые, вероятно, не имеют смысла (я пытался добавить документ .Write внутри функции, и я получил значение обратно, но ни одна из остальных страницы). Так что я действительно ищу некоторую помощь в понимании JavaScript и используя SP.ClientContext таким образом.
Редактировать: По сути, как я могу установить значение в переменной внутри onsuccessMethod и вернуть это обратно из функций для глобального VAR? Это позволило бы мне достичь именно то, что я пытаюсь сделать. Если я просто попробую создать глобальный список это
var myOutput = loadScript();
.
и установить это внутри onsuccessmethod:
myOutput = "Welcome " + this._currentUser.get_title());
return myOutput;
.
... Я могу установить оповещение в середине вышеперечисленного и увидите, что MyOutput удерживает значение сообщения идеально, но Myouput вне этих функций все еще отражает undefined. Я попробовал инициализацию этого сначала, проходя / принимая var в зависимости от Scriptloader и Finduser, а также кучу других простых вещей, но я боюсь, что есть что-то об этом, я просто недоразумение.
Любая / Все помогает очень ценится как всегда!
Решение
Вы не можете вернуть значение из асинхронного функции.Думаю так: что вы хотите сделать с "MyOutput"?Делайте это в дивы?Тогда просто поставьте код Andy Burns в ваш «OnsuccessMethod».Если у вас есть несколько CEWPS и Scripts внутри них, вы должны различить код JavaScript внутри них, а функции OnSuccess должны быть разными.Решение может быть использовано префикс задач, как
renderCurrentUser_load,
renderCurrentUser_onSucces,
renderCurrentUser_onError.
.
Ваши Divs должны иметь разные идентификаторы.
Другие советы
Почему бы не поместить HTML-элемент в ваш cewp:
<div id="myDiv" />
.
и вместо document.write (), используйте что-то вроде:
document.getElementById("myDiv").innerText = "my message";
.
Обратите внимание, что это может иметь проблемы с несколькими экземплярами веб-части на одной странице (то есть несколько элементов с идентификатором «MyDiv»)