2016-04-08 2 views
0

Привет, я получил 2 html-страницы. На первой странице я получаю данные из sharepoint 2013 с помощью запроса caml. Я храню значения в коллекции.Как использовать хранение сеанса в html?

Вот мой Javascript:

<script type="text/javascript"> 

    $(document).ready(function() { 
     var scriptbase = "examplebase" 
     $.getScript(scriptbase + "SP.Runtime.js", function() { 
      $.getScript(scriptbase + "SP.js", doNext); 
     }); 
    }); 


    var siteUrl = "example.example"; 


    function doNext() { 
     console.log("SharePoint geladen!!"); 
     retrieveListItems(siteUrl); 
    } 

    function retrieveListItems(siteUrl) { 

    var clientContext = new SP.ClientContext(siteUrl); 
    var oList = clientContext.get_web().get_lists().getByTitle('Component Documents'); 

    var camlQuery = new SP.CamlQuery(); 
    camlQuery.set_viewXml('<View><ViewFields><FieldRef Name="ComponentID" /><FieldRef Name="FileRef" /><FieldRef Name="ComponentType" /><FieldRef Name="FileLeafRef" /></ViewFields><Query><Where><Eq><FieldRef Name="ComponentCategory" /><Value Type="Text">Datenblatt</Value></Eq></Where></Query></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 = this.collListItem.getEnumerator(); 

    while (listItemEnumerator.moveNext()) { 
     var oListItem = listItemEnumerator.get_current(); 
     console.log(oListItem); 

    } 

    sessionStorage.setItem('test', listItemEnumerator); 


} 



function onQueryFailed(sender, args) { 
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()) 
} 

</script> 

Приведенный выше код работает на странице 1. В коллекции listItemEnumerator 32 объектов. Извините, но я новичок, так что я теперь, как сказать, но здесь Dont из отладчика: [object Object]{$0_0: Object {...}, $2P_0: false, $5_0: Object {...}, $R_0: Object {...}} Надеюсь, что это помогает ....

На странице 2 я хочу, чтобы заполнить с данными новой формы:

<form id="myForm"> 
    <select id="selectNumber"> 
    <option>Choose a number</option> 
    </select> 

с этим Javascript:

<script type="text/javascript"> 
var myObject = sessionStorage.getItem('test'); 
for(var i = 0; i < myObject.length; i++) { 
    var opt = myObject[i]; 
    var el = document.createElement("option"); 
    el.textContent = opt; 
    el.value = opt; 
    select.appendChild(el); 
} 
</script> 

Но почему-то sessionstuff не всегда неопределенными, независимо от того, что и я понятия не имею, почему. Может кто-нибудь объяснить мне, почему этот доцент работает?

Любая помощь будет большой и спасибо за ваше время.

BTW извините за мой английский

+0

Не беспокойтесь о своем английском, это хорошо! Можете ли вы рассказать нам, что значение переменной listItemEnumerator находится в onQuerySucceeded, пожалуйста, –

+0

@JohnMc внесло изменения в сообщение – opelhatza

ответ

1

Метод SetItem принимает ключ и значение, оба из которых должны быть строками. В вашем примере вы всегда используете ключ «тест», но я подозреваю, что это так, чтобы вы могли отлаживать.

Согласно this S.O post, вам необходимо сериализовать объект в строку, используя что-то вроде JSON.

+0

Неплохая работа Я получаю всегда ссылку Circular в аргументе значения, которая не поддерживается. – opelhatza

+0

Круговая ссылка связана с сериализацией объекта, имеющего отношения между объектами с обеих сторон. Вы можете справиться с этим, отрегулировав настройки сериализации JSON –

+1

Да, я заметил, что после того, как я написал комментарий. Я попытался отредактировать свой комментарий, но только возможно в кулак 5 минут. Но спасибо за вашу помощь, на этот раз все работает. – opelhatza

Смежные вопросы