UpdateListItems ajax调用成功但不返回创建的项目

时间:2013-01-18 08:45:02

标签: ajax sharepoint sharepoint-2010

尝试创建新的列表项并将创建的项的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

2 个答案:

答案 0 :(得分:1)

就像埃里克所说,应该指定ID字段,但似乎并不需要。无论是否使用它,我都设法完全执行UpdateListItems命令......

但是我在第一篇帖子中发现了其他2个问题:

  1. $(data).find('z\\:row')在Chrome中不起作用。不得不追加$(data.responseText).find('z\\:row')行。 事实证明,chrome将数据放在与其他浏览器不同的属性中。它使用responseText属性而不是responseXML属性。和`$(data).find('z \:row')在responseText属性中找不到任何内容。 这是一个令人头疼的问题,因为当我检查chrome调试器时,我仍然可以看到responseXML属性存在且包含所有预期的节点,只是缺少任何数据,例如ows_ID。

  2. 回调函数(function(data,status))不必更正要用作ajax调用的成功函数的参数。 ajax调用的响应数据放在jqXHR对象中。我认为这个对象始终是第一个参数,但事实证明successcomplete的参数列表不同。

    • 完成定义为:Function( jqXHR jqXHR, String textStatus )
    • 成功定义为: Function( Object data, String textStatus, jqXHR jqXHR )
  3. 因此,要将我的回调用作成功函数,它的标题应为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>