Retrieve SharePoint list items using JavaScript
In this article, I will describe a simple use of SP.JS file to retrieve data from a SharePoint list and display the items in a certain way.
In this scenario, I have a list of FAQs as a custom list (ID, Title, Answer, Image…etc).
I needed to pull the items from the list and append them into Div in a SharePoint Page, applying the right CSS styles and adding some fancy stuffs (images and so on).
Here are the steps to follow :
1- Create (if needed) your list
2- Fill the rows (items).
3- Create a new SharePoint Page
4- Switch to edit mode (if not already in edit mode)
5- Insert a Content Editor WebPart
6- Inlcude the script.
The Script
This is 100% client side script which will use SP.JS library to load the list items, loop over them and append them to a page DIV.
In this part of the script, I Check If the SP.JS has been loaded properly, and I create a new instance of the ClientContext, I also create an instance of my list FAQs.
var clientContext;
var website;
// Make sure the SharePoint script file 'sp.js' is loaded before your
// code runs.
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', sharePointReady);
// Create an instance of the current context.
function sharePointReady() {
var clientContext = new SP.ClientContext();
var oList = clientContext.get_web().get_lists().getByTitle('FAQs');
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml(
'<View><Query><Where><Geq><FieldRef Name=\'ID\'/>' +
'<Value Type=\'Number\'>1</Value></Geq></Where></Query>' +
'<RowLimit>10</RowLimit></View>'
);
this.collListItem = oList.getItems(camlQuery);
clientContext.load(collListItem);
clientContext.executeQueryAsync(
Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed)
);
}
function onQuerySucceeded(sender, args) {
var listItemInfo = '';
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
var FAQLine = GetLine(oListItem.get_item('Title'),oListItem.get_item('Answer'),oListItem.get_item('Created'));
$('#Content').append(FAQLine);
}
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() +
'\n' + args.get_stackTrace());
}
GetLine takes the parameters (Question, Answer and CreateDate), and put them in a nice HTML code.
function GetLine(Question, Answer, CreateDate)
{
var Content='<div>';
Content+=' <img src="https://cdn1.iconfinder.com/data/icons/all_google_icons_symbols_by_carlosjj-du/128/question-y.png" style="max-height:48px;float:left;padding:10px;"/><h3>'+Question+'</h3><p>'+Answer+'</h4>';
Content+='<span class="badge badge-pill badge-success pull-right">'+CreateDate+'</span>';
Content+=' </div>';
return Content;
}
The final script should look like this:
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous"/>
<script>
var clientContext;
var website;
// Make sure the SharePoint script file 'sp.js' is loaded before your
// code runs.
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', sharePointReady);
// Create an instance of the current context.
function sharePointReady() {
var clientContext = new SP.ClientContext();
var oList = clientContext.get_web().get_lists().getByTitle('FAQs');
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml(
'<View><Query><Where><Geq><FieldRef Name=\'ID\'/>' +
'<Value Type=\'Number\'>1</Value></Geq></Where></Query>' +
'<RowLimit>10</RowLimit></View>'
);
this.collListItem = oList.getItems(camlQuery);
clientContext.load(collListItem);
clientContext.executeQueryAsync(
Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed)
);
}
function onQuerySucceeded(sender, args) {
var listItemInfo = '';
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
var FAQLine = GetLine(oListItem.get_item('Title'),oListItem.get_item('Answer'),oListItem.get_item('Created'));
$('#Content').append(FAQLine);
}
}
function GetLine(Question, Answer, CreateDate)
{
var Content='<div style="margin-bottom:30px;">';
Content+=' <h4><img src="https://cdn1.iconfinder.com/data/icons/all_google_icons_symbols_by_carlosjj-du/128/question-y.png" style="max-height:48px;float:left;padding:10px;"/>'+Question+'</h4><p>'+Answer+'</h4>';
Content+=' </div>';
return Content;
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() +
'\n' + args.get_stackTrace());
}
</script>
<div id="Content">
</div>
