2013-08-26 44 views
0

我想弄清楚为什么我无法访问变量theHeaders以外的函数。我已经试过返回它,然后直接调用函数,我得到了定义的colListItem。我把它称为像这样:SharePoint列表查询JavaScript变量访问问题

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

我得到一个未定义的每次。如何在theHeaders以外的功能访问?

我不明白的是为什么我能得到它在onQuerySucceeded()功能的警报()消息的工作,但我不能这样做doucment.write。我得到一个权限被拒绝的错误,如果我尝试比警戒任何其他行动() 的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()); 
} 
+0

它适合我。你使用哪种浏览器? –

+0

Internet Explorer。你有document.write工作,或者你访问函数外的变量“theHeaders”? –

+0

是的。我把document.write放在警报的地方,它工作。尝试放置html标签并在标签中显示标题值。 –

回答

0

如果你声明你的文件的顶部(在这里你声明SITEURL)的变量,你从内取出声明你的功能,你应该能够在功能之外访问它。但是,这意味着你正在改变变量的范围。如果你确定,它应该可以工作。

+0

最终目标是将结果写入页面而不是显示警报消息。每当我用doucment.write或其他东西切换警报消息时,我都会遇到权限错误。 –

+0

它是否与console.log()一起使用?警报/控制台上实际打印的是什么? –

+0

标题栏的内容以“OneTwoThreeFourFive”这样的字符串形式显示(列值为一,二,三,四,五) –

0

请勿使用document.write,因为它会破坏您的页面内容。将您的结果注入div更好。喜欢的东西:

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

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