我创建了一个递归循环来删除带有SPServices的SharePoint列表中的项目。我暂停了5秒钟;但由于某种原因,它一次只删除2个项目,然后执行等待而不是删除批处理,然后重复该功能。
请在下面找到我的代码:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery.SPServices/0.7.1a/jquery.SPServices-0.7.1a.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$intStart = 1;
$intCount = 10;
$intEnd = 40;
$("input[class='buttonpush']").click(function () {
var looper = function () {
if ($intStart < $intCount && $intStart < $intEnd) {
$().SPServices.SPUpdateMultipleListItems({
webURL: "http://widgettest",
listName: "TestList",
CAMLQuery: "<Query><Where><And><Gt><FieldRef Name='ID' /><Value Type='Counter'>" + $intStart + "</Value></Gt><Lt><FieldRef Name='ID' /><Value Type='Counter'>" + $intCount + "</Value></Lt></And></Where></Query>",
batchCmd: "Delete",
valuepairs: [],
debug: false,
completefunc: function (xData, Status) {
$intStart = $intStart + 5;
$intCount = $intCount + 5
setTimeout(looper, 5000);
}
});
}
else {
}
}
looper();
});
});
</script>
答案 0 :(得分:0)
好的,既然您显示了对looper()
的初始调用,那么逻辑似乎没有任何问题。 looper()
应该运行8次,直到$intStart
等于41.这些是你可能没有像你期望的那样连续运行looper()的原因:
$().SPServices.SPUpdateMultipleListItems()
的错误,而completeFunc
未按照您的预期执行。$intStart
,$intCount
或$intEnd
的值,因此它们在您运行时会意外更改,因此循环不会运行尽可能多的迭代次数。looper()
运行期间某处导致javascript异常导致执行停止。要对此进行调试,只需在调用console.log()
之前添加一个唯一的$().SPServices.SPUpdateMultipleListItems()
语句,然后在completeFunc
中添加另一个语句,这样您就可以确切地知道它在停止之前的距离。< / p>
关于代码的其他一些观察:
$intStart
始终小于$intCount
,因为它开始较少且两者都加5,因此您不需要if
语句的那一部分。$
符号并不习惯。这不是这种情况,只会阻碍javascript对熟悉javascript的人的可读性。$intStart
,$intCount
或$intEnd
可能不应该是全局变量,并且在任何情况下都不应该隐式声明或意外声明全局变量。如果你的意思是全局变量,那么使用var
将它们声明为全局范围内的全局变量。如果你的意思是他们在某个范围内是本地的,那么在那个范围内声明它们。document.ready()
时初始化,因此您的按钮按钮仅在第一次起作用。第二次推时它永远不会做任何事情。looper()
正在运行时,您的代码未受到用户再次按下按钮的保护(这将导致重复的请求被启动)。以下是您的CAMLQuery前两次的内容:
<Query>
<Where>
<And>
<Gt>
<FieldRef Name='ID' />
<Value Type='Counter'>1</Value>
</Gt>
<Lt>
<FieldRef Name='ID' />
<Value Type='Counter'>10</Value>
</Lt>
</And>
</Where>
</Query>"
<Query>
<Where>
<And>
<Gt>
<FieldRef Name='ID' />
<Value Type='Counter'>6</Value>
</Gt>
<Lt>
<FieldRef Name='ID' />
<Value Type='Counter'>15</Value>
</Lt>
</And>
</Where>
</Query>"
这对我来说不正确。第一次,你要求处理&gt; 1&amp;&amp; &LT; 10.第二次,你要求处理&gt; 6&amp;&amp; &LT; 15。
第二次不应该是&gt; 9&amp;&amp; &LT; 18,以获得尚未处理的新的?