尝试创建新的列表项并将创建的项的ID存储在变量中以供以后使用。 (在SharepointOnline 2010中) 我能够完美地创建项目但不能获得结果对象的ID。
我目前的解决方案是使用UpdateListItems创建一个ajax请求来创建项目,然后在成功回调函数中尝试在结果对象中查找和ID。
var onsuccessArg = function (data) {
$(data).find('z\\:row').each(function () {
savedItemID = $(this).attr('ows_ID');
});
};
因此,列表项成功创建并调用onSuccess。但是从不输入每个子句。
起初我以为find('z\\:row')
存在浏览器问题,但我在chrome调试器中查看了它的data
对象,我可以看到,虽然<z:row>
元素确实存在,但它确实存在不包含任何子节点!所以它就像服务没有返回任何项目,即使它确实成功创建了一个列表项。
为什么会这样?
我应该能够以这种方式获取创建的列表项ID,对吧?我只是遗漏了什么或者我的方法不正确吗? 服务器是否会引起一些奇怪的问题?我认为此代码以前一直运行良好
编辑:由于某些原因无法将整个代码粘贴到帖子中。所以这里是一个pastebin而不是http://pastebin.com/iGrvytgn
答案 0 :(得分:1)
就像埃里克所说,应该指定ID字段,但似乎并不需要。无论是否使用它,我都设法完全执行UpdateListItems命令......
但是我在第一篇帖子中发现了其他2个问题:
$(data).find('z\\:row')
在Chrome中不起作用。不得不追加$(data.responseText).find('z\\:row')
行。
事实证明,chrome将数据放在与其他浏览器不同的属性中。它使用responseText属性而不是responseXML属性。和`$(data).find('z \:row')在responseText属性中找不到任何内容。
这是一个令人头疼的问题,因为当我检查chrome调试器时,我仍然可以看到responseXML属性存在且包含所有预期的节点,只是缺少任何数据,例如ows_ID。
回调函数(function(data,status)
)不必更正要用作ajax调用的成功函数的参数。 ajax调用的响应数据放在jqXHR对象中。我认为这个对象始终是第一个参数,但事实证明success
和complete
的参数列表不同。
Function( jqXHR jqXHR, String textStatus )
Function( Object data, String textStatus, jqXHR jqXHR )
因此,要将我的回调用作成功函数,它的标题应为function(obj,status,data)
。
答案 1 :(得分:0)
调用UpdateListItems时必须填写ID。请参阅MSDN中的Cmd =“新”示例。
因此,在您的情况下,将Batch元素更改为:
var batch = "<Batch OnError=\"Continue\"><Method ID=\"1\" Cmd=\"New\">" +
"<Field Name=\"Title\">" + title + "</Field>" +
"<Field Name=\"ID\">" + New + "</Field>" +
"</Method></Batch>";
New是一个编造ID。您仍然需要解析真实ID的结果,就像您现在一样。
以下是对SP2010服务器列表的请求示例:
<?xml version="1.0" encoding="utf-8"?>
<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>
<UpdateListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>Announcements</listName>
<updates>
<Batch OnError="Continue">
<Method ID="1" Cmd="New">
<Field Name="ID">998877</Field>
<Field Name="Title">abcdef</Field>
</Method>
</Batch>
</updates>
</UpdateListItems>
</soap:Body>
</soap:Envelope>
回复:
<?xml version="1.0" encoding="utf-8"?>
<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>
<UpdateListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<UpdateListItemsResult>
<Results>
<Result ID="1,New">
<ErrorCode>0x00000000</ErrorCode>
<ID />
<z:row ows_ID="6" details="removed" xmlns:z="#RowsetSchema" />
</Result>
</Results>
</UpdateListItemsResult>
</UpdateListItemsResponse>
</soap:Body>
</soap:Envelope>