SharePoint列表查询JavaScript变量访问问题
我试图找出为什么我不能访问函数外部的变量SharePoint列表查询JavaScript变量访问问题,javascript,list,sharepoint,Javascript,List,Sharepoint,我试图找出为什么我不能访问函数外部的变量theHeaders。我尝试返回它,然后直接调用该函数,我得到了一个定义的colListItem。我这样称呼它: 警报(onquerysucceeed())和警报(onquerysucceeed(发送方,args)) 我每次都会得到一个未定义的 如何访问函数外部的标题 我不明白的是,为什么我可以让它在onQuerySucceeded()函数中的alert()消息中工作,但我不能执行类似于doucment.write的操作。如果尝试alert()以外的任何其
theHeaders
。我尝试返回它,然后直接调用该函数,我得到了一个定义的colListItem
。我这样称呼它:
警报(onquerysucceeed())代码>和警报(onquerysucceeed(发送方,args))代码>
我每次都会得到一个未定义的
如何访问函数外部的标题
我不明白的是,为什么我可以让它在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());
}
var siteUrl='/sites/dev/';
ExecuteOrderLayUntilScriptLoaded(retrieveListItems,“sp.js”);
函数retrieveListItems()
{
var clientContext=new SP.clientContext(siteUrl);
var oList=clientContext.get_web().get_list().getByTitle('myList');
var camlQuery=new SP.camlQuery();
camlQuery.set_viewXml(“”);
this.collListItem=oList.getItems(camlQuery);
加载(collListItem);
clientContext.executeQueryAsync(Function.createDelegate(this,this.onQuerySucceed),Function.createDelegate(this,this.onQueryFailed));
}
函数onquerysucceed(发送方,参数)
{
var listItemEnumerator=collListItem.getEnumerator();
var=”;
while(listItemEnumerator.moveNext())
{
var oListItem=listItemEnumerator.get_current();
theHeaders=theHeaders+oListItem.get_项目(“标题”);
}
警报(标题);
}
函数onQueryFailed(发送方,参数)
{
警报('请求失败。'+args.get_message()+'\n'+args.get_stackTrace());
}
如果在文件顶部(声明siteUrl的位置)声明变量,并从函数中删除该声明,则应该能够在函数外部访问该声明。但是,这意味着您正在更改变量的范围。如果你同意,它应该可以工作。不要使用文档。写,因为它会破坏你的页面内容。将结果注入div
会更好。比如:
document.querySelector('#myDiv').innerHTML = theHeaders
顺便说一下,您不能使用alert(onQuerySucceeded())
因为从retrieveListItems()
异步调用onQuerySucceeded()
,所以它不能返回值。最终目标是将结果写入页面,而不是显示警报消息。每当我用doucment.write或其他什么东西将警报消息切换出去时,都会出现权限错误。它与console.log()一起工作吗?警报/控制台上实际打印的内容是什么?标题列的内容以字符串形式显示,如“OneToThreeFour5”(列值为1、2、3、4、5),这对我很有用。您正在使用哪个浏览器?Internet Explorer。您获得了document.write to work或访问了函数外部的变量“theHeaders”?是。我把document.write放在了警报的位置,它就工作了。尝试放置html标签并在标签中显示标题值。