Вопрос

Я новичок в этом, и я просто пытаюсь понять, как использовать некоторые из 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»)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top