在Sharepoint列表调用的ajax getItems上未定义result.responseXML

时间:2012-05-14 11:17:59

标签: ajax web-services sharepoint caml

我正在编写一个脚本,用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调试脚本时,脚本显示为蓝色,就像文本或注释一样,虽然脚本执行,但我不能设置断点。

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

1 个答案:

答案 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 ModelREST services