我正在使用jQuery通過GetListItems方法訪問Sharepoint 2007的SOAP接口來讀取自定義公告列表,以便每分鐘刷新一次該列表(如果列表的所有者添加了新內容,則新的內容變得可見而沒有最終用戶刷新他們的分享點屏幕)。我想要做的不僅是刷新列表,我希望列表中的每個項目一次循環一次(也許每個項目保持可見10秒,然後下一個項目將加載到該空間中。SharePoint SOAP GetListItems VS jQuery - 如何使用Ajax循環自定義列表項以及Ajax刷新列表內容?
這裏是我的代碼至今:
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="/SiteCollectionDocuments/jquery.timers-1.0.0.js" ></script>
<script type="text/javascript">
$(document).ready(function() {
// Create the SOAP request
// NOTE: we need to be able to display list attachments to users, hence the addition of the
// <queryOptions> element, which necessitated the addition of the <query> element
var soapEnv =
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
<soapenv:Body> \
<GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
<listName>testlist</listName> \
<viewFields> \
<ViewFields> \
<FieldRef Name='Title' /> \
<FieldRef Name='Body' /> \
<FieldRef Name='ID' /> \
<FieldRef Name='Attachments' /> \
</ViewFields> \
</viewFields> \
<query> \
<Query /> \
</query> \
<queryOptions> \
<QueryOptions> \
<IncludeAttachmentUrls>TRUE</IncludeAttachmentUrls> \
</QueryOptions> \
</queryOptions> \
</GetListItems> \
</soapenv:Body> \
</soapenv:Envelope>";
// call this SOAP request every 20 seconds
$("#tasksUL").everyTime(20000,function(i){
// our basic SOAP code to hammer the Lists web service
$.ajax({
url: "http://ourdomain.net/_vti_bin/lists.asmx",
type: "POST",
dataType: "xml",
data: soapEnv,
error: printError,
complete: processResult,
contentType: "text/xml; charset=\"utf-8\""
});
});
});
// basic error display that will pop out SOAP errors, very useful!
function printError(XMLHttpRequest, textStatus, errorThrown)
{
alert("There was an error: " + errorThrown + " " + textStatus);
alert(XMLHttpRequest.responseText);
}
// main method that will cycle through the SoAP response nodes
function processResult(xData, status)
{
$(xData.responseXML).find("z\\:row").each(function()
{
// resets display element
$("#tasksUL").empty();
// gets attachments array - if there is more than one attachment,
// they get seperated by semi-colons in the response
// they look like this natively (just an example):
// ows_Attachments = ";#http://server/Lists/Announcements/Attachments/2/test.txt;
// #http://server/Lists/Announcements/Attachments/2/UIP_Setup.log;#"
var mySplitResult = $(this).attr("ows_Attachments").split(";");
// set up storage for later display of images
var notice_images = "";
// processes attachments - please forgive the kludge!
for(i = 0; i < mySplitResult.length; i++)
{
// check to see the proper link URL gets chosen
if (i % 2 != 0 && i != 0)
{
// strips out pound sign
mySplitResult[i] = mySplitResult[i].replace("#", "");
// (possibly redundant) check to make sure element isn't simply a pound sign
if (mySplitResult[i] != "#")
{
// adds an img tag to an output container
notice_images = notice_images + "<img src='" + mySplitResult[i] + "' border='0' align='right' style='float:right;' /><br />";
}
}
}
// create final output for printing
var liHtml = "<h3>" + $(this).attr("ows_Title") + "</h3><p>" + notice_images + $(this).attr("ows_Body") + "</p>";
// assign output to DIV tags
$("#tasksUL").html(liHtml);
});
}
</script>
<div id="tasksUL"/> </div>
這是很簡單的東西,所以到目前爲止(雖然尋找體面的文件爲你能與GetListItem SOAP請求做的是一項艱鉅的)裏面的。我遍歷返回的行(PprocessResult函數)的塊,我重置了分配給DIV塊的HTML,以便只有一行顯示爲輸出。代碼設置的方式,這意味着只有最後一行排入我的自定義列表將可見,因爲我沒有代碼暫停迭代。
我的想法一直纏繞定時器周圍的代碼塊:
$(xData.responseXML).find("z\\:row").each(MYTIMER(10000, function(){...
但是我遇到了零或混合的結果。
我的問題給你所有的是:什麼是最好的方式來設置我的當前代碼來刷新源列表數據,就像它現在一樣,並循環查詢從列表中的結果一次一個(最好用每個項目上的小暫停,以便人們可以閱讀它)?
看起來很熱的聖牛!我沒有考慮將清單項目的循環與用於刷新數據集的AJAX代碼分開。我真的很喜歡這種方法,我可以看到在我的應用程序的多個區域使用它。非常感謝!!! – 2009-10-19 14:19:26
好的,我遇到了這個問題。無論我如何鏈接到循環庫中,我得到一個錯誤: 錯誤:$(「#tasksUL」)週期是不是一個函數 這裏是連接語句: <腳本類型=「文本/ javascript「src =」http://cloud.github.com/downloads/malsup/cycle/jquery.cycle.all.2.72.js「> 這裏是我寫的代碼添加到上面的代碼: (script).ready(function(){('#tasksUL').cycle({ fx:'fade' }); }); 上面的腳本現在爲每個列表行創建一個seoperate div ... – 2009-10-20 03:55:10
查看某種測試頁面會非常有幫助。說出這裏發生的事情有點難。 – 2009-10-20 15:42:54