【问题标题】:How to use session storage in html?如何在 html 中使用会话存储?
【发布时间】:2016-07-29 13:19:44
【问题描述】:

您好,我有 2 个 html 页面。在第一页,我借助 caml 查询从 sharepoint 2013 获取数据。我将值存储在集合中。

这是我的 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 个对象。抱歉,我是新人,所以我现在不知道怎么说,但来自调试器:[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 总是未定义,我不知道为什么。有人能解释一下为什么这个剂量有效吗?

任何帮助都会很棒,感谢您的宝贵时间。

顺便说一句,对不起我的英语

【问题讨论】:

  • 别担心你的英语,很好!请告诉我们 onQuerySucceeded 中 listItemEnumerator 变量的值是什么
  • @JohnMc 对帖子进行了编辑

标签: javascript html sharepoint


【解决方案1】:

setItem 方法接受键和值,两者都必须是字符串。在您的示例中,您始终使用“测试”键,但我怀疑这是为了让您进行调试。

根据this S.O post,您需要使用 JSON 之类的东西将对象序列化为字符串。

【讨论】:

  • 不会工作我总是在不支持的值参数中得到循环引用。
  • 循环引用是由于被序列化的对象在双方对象之间存在关系。您可以通过调整 JSON 序列化设置来处理此问题
  • 是的,我注意到在我写了评论之后。我试图编辑我的评论,但只能在 5 分钟内完成。但是这次感谢您的帮助,一切正常。
  • 太好了,我很高兴听到这个消息!
猜你喜欢
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多