2017-12-20 35 views
0

Ich versuche, eine Liste von Schulen zu bekommen, in die option von einem select Element. Ich möchte, dass die Dropdown-Optionen hinzugefügt werden, wenn die Seite geladen wird, aber ich mache nichts richtig. Der folgende Code funktioniert, wenn er direkt mit einem button Element aufgerufen wird, aber es funktioniert nicht beim Laden der Seite.Sharepoint Javascript Fehler beim Laden der Seite

Der Fehler, den ich bekommen, ist auf der Linie var clientContext = new SP.ClientContext(siteUrl);

var siteUrl= '/learning/schools'; 

window.load = init(); 

    function init(){ 

    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', retrieveListItems()); 
} 

function retrieveListItems() { 

    var clientContext = new SP.ClientContext(siteUrl); 

    var oList = clientContext.get_web().get_lists().getByTitle('Schools'); 

    var camlQuery = new SP.CamlQuery(); 

    camlQuery.set_viewXml('<View><Query><Where><Geq><FieldRef Name=\'ID\'/>' + 
     '<Value Type=\'Number\'>1</Value></Geq></Where></Query><RowLimit>10</RowLimit></View>'); 

    this.collListItem = oList.getItems(camlQuery); 

    clientContext.load(collListItem); 

    clientContext.executeQueryAsync(
      Function.createDelegate(this, this.onQuerySucceeded), 
      Function.createDelegate(this, this.onQueryFailed));   

} 

function onQuerySucceeded(sender, args) { 

    var listItemInfo = ''; 

    var listItemEnumerator = collListItem.getEnumerator(); 

    var schoolCodes = document.getElementById('classSchoolList'); 

    while (listItemEnumerator.moveNext()) { 
     var oListItem = listItemEnumerator.get_current(); 
     var schoolOption = document.createElement('option'); 
     schoolOption.value = oListItem.get_item('Title'); 
     schoolOption.text = oListItem.get_item('Title') + " : " + oListItem.get_item('School'); 
     schoolCodes.add(schoolOption); 
    } 


} 

function onQueryFailed(sender, args) { 

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()); 

} 
+0

Ihr Code scheint richtig. Vielleicht können Sie einfach Funktionsnamen wie 'retrieveListItems' ohne Klammern wie in der folgenden Zeile versuchen:' SP.SOD.executeFunc ('sp.js', 'SP.ClientContext', retrieveListItems); '. Verweise: https://sharepoint.stackexchange.com/questions/79010/sharepoint-com-sp-clientcontextsiteurl-object-doesnt-support-this-action –

+0

@rohit Ich habe das versucht, aber es scheitert immer noch an der gleichen Stelle auf Seitenladung. Allerdings habe ich einen Knopf, den ich anklicke und es funktioniert gut. –

Antwort

1

Könnten Sie

//load the sp.js script and execute the init method 
//no guarantee sp.js will be fully loaded before init() runs. 
SP.SOD.executeFunc('sp.js', init()); 

function init(){ 
    //ensure script is fully loaded, then execute retrieveListItems() 
    ExecuteOrDelayUntilScriptLoaded(retrieveListItems(), 'sp.js'); 
} 

oder alternativ

SP.SOD.executeFunc('sp.js', null, function(){ 
    ExecuteOrDelayUntilScriptLoaded(retrieveListItems(), 'sp.js'); 
}); 

ExecuteOrDelayUntilScriptLoaded versuchen "Objekt diese Aktion nicht unterstützt" wartet auf den Ladevorgang der Datei 'sp.js' vor dem Aufruf von retrieveListItems(). Aber wenn 'sp.js' nicht angefordert wurde, wird es ewig warten. Deshalb rufen wir zuerst executeFunc an, um 'sp.js' anzufordern. Es gibt jedoch keine Garantie, dass es geladen wird, bevor es weitergeht. Es fügt es einfach zu dem Stapel von Skripten hinzu, die geladen werden müssen, und führt dann den Rückruf aus.

Verwandte Themen