【问题标题】:SharePoint List Query JavaScript Variable Access IssueSharePoint 列表查询 JavaScript 变量访问问题
【发布时间】:2013-08-26 00:15:43
【问题描述】:

我想弄清楚为什么我不能在函数之外访问变量theHeaders。我尝试返回它,然后直接调用该函数,我得到一个 colListItem on defined。我这样称呼它:

alert(onQuerySucceeded());alert(onQuerySucceeded(sender, args));

我每次都得到一个未定义的。

如何在函数之外访问theHeaders

我不明白为什么我可以让它在onQuerySucceeded() 函数的alert() 消息中工作,但我不能做类似doucment.write 的事情。如果我尝试除 alert() 之外的任何其他操作,我会收到权限被拒绝错误 JavaScript:

var siteUrl = '/sites/dev/';
ExecuteOrDelayUntilScriptLoaded(retrieveListItems, "sp.js");
function retrieveListItems()
{
    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('myList');

    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml("<Where><IsNotNull><FieldRef Name='Title' /></IsNotNull>  </Where>");
    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 listItemEnumerator = collListItem.getEnumerator();
    var theHeaders = "";
    while (listItemEnumerator.moveNext()) 
    {
        var oListItem = listItemEnumerator.get_current();
        theHeaders = theHeaders + oListItem.get_item('Title');


    }
    alert(theHeaders);


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

【问题讨论】:

  • 它对我有用。你用的是哪个浏览器?
  • Internet Explorer。你让 document.write 工作还是你在函数之外访问了变量“theHeaders”?
  • 是的。我将 document.write 放置在 alert 的位置,它起作用了。尝试放置 html 标签并在标签中显示 headers 值。

标签: javascript list sharepoint


【解决方案1】:

如果您在文件顶部(声明 siteUrl 的位置)声明变量并从函数中删除该声明,您应该能够在函数外部访问它。但是,这意味着您正在更改变量的范围。如果你没问题,它应该可以工作。

【讨论】:

  • 最终目标是将结果写入页面而不是显示警告消息。每当我使用 doucment.write 或其他东西切换警报消息时,我都会收到权限错误。
  • 它是否适用于 console.log()?警报/控制台上实际打印的是什么?
  • 标题列的内容显示在字符串中,如“OneTwoThreeFourFive”(列值为一、二、三、四、五)
【解决方案2】:

不要使用document.write,因为它会破坏您的页面内容。将您的结果注入div 会更好。类似的东西:

document.querySelector('#myDiv').innerHTML = theHeaders

顺便说一句,你不能使用alert(onQuerySucceeded());,因为onQuerySucceeded()是从retrieveListItems()异步调用的,所以它不能返回值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多