2016-06-03 3 views
0

Ich habe den folgenden Code, der den Login-Namen für den aktuell angemeldeten in Sharepoint-Benutzer zurück:JavaScript Zuordnung nicht auf globale Variable

var currentUser; 
var currentUserName; 
ExecuteOrDelayUntilScriptLoaded(MainMethod,'sp.js'); 

function MainMethod() { 
    GetName(); 
    alert("MAIN " + currentUserName); 
} 

function GetName(){ 
    this.clientContext = new SP.ClientContext.get_current(); 
    this.oWeb = clientContext.get_web(); 
    currentUser = this.oWeb.get_currentUser(); 
    this.clientContext.load(currentUser); 
    this.clientContext.executeQueryAsync(Function.createDelegate(this,this.onQuerySucceeded), Function.createDelegate(this,this.onQueryFailed)); 
} 
function onQuerySucceeded() { 
    currentUserName= currentUser.get_loginName().split("\\")[1]; 
    alert("GetName " + currentUserName); 
} 
function onQueryFailed(sender, args) { 
    alert('Failed to retrieve user name'); 
} 

Wenn ich den Code ausführen, bekomme ich diese 2 Warnmeldung Boxen :

"GetName" firstname.lastname

"MAIN" undefined

Sollte die Linie dernicht currentUserName= currentUser.get_loginName().split("\\")[1]; zuweisenWert für die globale currentUserName Variable?

+0

Haben Sie die Ergebnisse jedes Teils dieser Logik überprüft? h. log out 'currentUser.get_loginName()', 'currentUser.get_loginName(). split (" \\ ")' und 'currentUser.get_loginName(). split (" \\ ") [1]'. Überprüfen Sie, ob Sie alles sind, was Sie erwarten. –

+0

Ja, alle geben die richtigen Werte zurück und der Code funktioniert wie erwartet, abgesehen von der Variablenzuweisung. 'get_loginName()' gibt den Namen des Benutzers in der Form 'i: 0 # .w | Domäne \ Vorname.Nachname 'zurück – Bassie

+0

versuche, window.currentUserName einen Wert zuzuweisen – meen

Antwort

1

Verwenden Sie alert("MAIN " + currentUserName); in success() Funktion. Es wird den geänderten Wert erhalten, aber nicht in MainMethod(), weil jsom asynchron ausgeführt wird.

  • Es wird ausführen erste GetName() Funktion
  • Dann wird es die alert("MAIN " + currentUserName);
  • ausführen Dann wird es ausführen onQuerySucceeded()

Das, warum Sie für MAIN undefiniert sind immer da MAIN vor dem success() ausgeführt wird .

+0

Vielen Dank für Ihre Erklärung Ronak das ist sehr hilfreich - Ich denke, ich muss einen Weg finden, die Methode synchron auszuführen ! – Bassie

2

Sie können sicherstellen, dass Sie auf globale Eigenschaft zugreifen, indem Sie window.currentUserName = currentUser.get_loginName().split("\\")[1] verwenden.

Um polutting globalen Namensraum mit vielen Variablen vermeiden können Sie gruppieren sie in Objekt wie folgt:

window.user = { 
    currentUserName, 
    currentUser 
} 

Dann Sie es von window.user.currentUserName zugreifen konnte.

+0

Dies scheint in diesem Fall nicht zu funktionieren - ich bekomme immer noch die 'undefined' Variable Nachricht – Bassie