我正在编写一个脚本,用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 builder通过Sharepoint Web服务连接到列表并且工作正常。
此外,当我尝试使用IE Developer Tools调试脚本时,脚本显示为蓝色,就像文本或注释一样,虽然脚本执行,但我不能设置断点。
有谁知道为什么会发生这一切?谢谢!
答案 0 :(得分: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>";
如果您在其他工具中使用了网络请求,则可以使用Fiddler来比较输出。
SharePoint服务器错误日志有时会指出出错的地方。
我假设您使用SharePoint 2007,如果您只定位到SharePoint 2010,最好使用Javascript中的Client Object Model或REST services。