2

我正在编写一个脚本,以使用 ajax 从 Sharepoint 列表中获取一些项目。我一直在努力让这个工作两周。尽管我之前已经成功完成了此操作,但在此我不知道我错过了什么。

这是我的代码:

var xmlData ="<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'><soap:Body><GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'><listName>CACF25CF-D392-4A28-A2C6-91D4C72AEE05</listName><query><Query   xmlns=''><Where><Eq><FieldRef Name='ows_LinkTitle' /><Value Type='Text'>";
xmlData+=value;
xmlData+="</Value></Eq></Where></Query></query></GetListItems></soap:Body></soap:Envelope>";

value变量包含过滤列表的值。

这是我的ajax调用:

$.ajax({   
url: "https://mysharepointsite.net/sites/scm/_vti_bin/lists.asmx",   
type: "POST",
dataType: "xml",   
data: xmlData,    
complete:SuccessFuncDetails,   
error: ErrorFunc,
contentType: "text/xml; charset=\"utf-8\""  
});

正如我在标题中所说,此调用的 XML 响应是未定义的,我不知道为什么。我已经使用 u2u CAML 构建器通过 Sharepoint Web 服务连接到列表并且工作正常。

此外,当我尝试使用 IE 开发人员工具调试脚本时,脚本显示为蓝色,就像文本或注释一样,并且我无法设置断点,尽管脚本执行。

有谁知道为什么会发生这一切?谢谢!

4

1 回答 1

0

您的请求中缺少 SOAPAction HTTP 标头,您可以通过在 beforeSend 中设置它来添加它:

$.ajax({
    url: "https://mysharepointsite.net/sites/scm/_vti_bin/lists.asmx",
    type: "POST",
    dataType: "xml",
    data: xmlData,
    complete: SuccessFuncDetails,
    error: ErrorFunc,  
    beforeSend: function (xhr) { xhr.setRequestHeader('SOAPAction', 'http://schemas.microsoft.com/sharepoint/soap/GetListContentTypes'); },
    contentType: "text/xml; charset=\"utf-8\""
}); 

我还必须稍微修改您的查询字符串,确保将其调整到您的列表中:

var xmlData = "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'><soap:Body><GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'><listName>{823F6320-4698-4CED-B86A-5929A765CCAF}</listName><viewName /><query><Query   xmlns=''><Where><Eq><FieldRef Name='LinkFilename' /><Value Type='Text'>"; 
xmlData+=value; 
xmlData+="</Value></Eq></Where></Query></query><viewFields><ViewFields xmlns=''><FieldRef Name='ID' /></ViewFields></viewFields><rowLimit>1000</rowLimit><queryOptions><QueryOptions xmlns=''><ViewAttributes Scope='Recursive' /></QueryOptions></queryOptions></GetListItems></soap:Body></soap:Envelope>";

如果您的 Web 请求在另一个工具中工作,您可以使用Fiddler来比较输出。

SharePoint 服务器错误日志有时会指出问题所在。

我假设您使用的是 SharePoint 2007,如果您只针对 SharePoint 2010,则最好使用客户端对象模型或 Javascript 中的REST 服务

于 2012-05-14T14:58:01.353 回答