After a review with a colleague we manage to fix the problem. It seems that I was doing an improper call to a method that was not defined in the scope of the javascript class. Those are the kind of silly mistakes that bug you out for several hours because you overlook them.
Below is the actual working code after some refactoring so anyone can have it here for future references.
$(document).ready(function () {
SP.SOD.executeOrDelayUntilScriptLoaded(loadMyProjects,'SP.js');
});
var $ddlMyProjects;
var $ddlMyProjectsNewItem;
var $ddlMyProjectsEditItem;
var allProjects = new Array();
function loadMyProjects()
{
$ddlMyProjectsNewItem = $("#ctl00_ctl32_g_03acc13b_954d_4bdc_9544_b379206bc9d5_ctl00_ctl05_ctl00_ctl00_ctl00_ctl04_ctl00_Lookup");
$ddlMyProjectsEditItem= $("#ctl00_ctl32_g_23803b04_bdec_4c98_a4af_0b863da464c1_ctl00_ctl05_ctl00_ctl00_ctl00_ctl04_ctl00_Lookup");
var isTimesheetNewForm = $ddlMyProjectsNewItem.attr("id") != undefined ? true : false;
var isTimesheetEditForm = $ddlMyProjectsEditItem.attr("id") != undefined ? true : false;
if(isTimesheetNewForm)
{
$ddlMyProjects = $ddlMyProjectsNewItem;
}
else if(isTimesheetEditForm)
{
$ddlMyProjects = $ddlMyProjectsEditItem;
}
else
{
return;
}
$ddlMyProjects.empty();
// Get the current client context.
var clientContext = SP.ClientContext.get_current();
var web = clientContext.get_web();
var list = web.get_lists().getByTitle('Project Register');
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml("<View>" +
"<ViewFields>" +
"<FieldRef Name='Full_x0020_Project_x0020_Name' />" +
"<FieldRef Name='ID' />" +
"<FieldRef Name='Links' />" +
"</ViewFields>" +
"<Query>" +
"<Where>" +
"<Eq>" +
"<FieldRef Name='Status' />" +
"<Value Type='Lookup'>WIP</Value>" +
"</Eq>" +
"</Where>"+
"<OrderBy>" +
"<FieldRef Name='Full_x0020_Project_x0020_Name' Ascending='TRUE' />" +
"</OrderBy>" +
"</Query>" +
"</View>");
this.collListItem = list.getItems(camlQuery);
clientContext.load(collListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onProjectsQuerySucceeded), Function.createDelegate(this, this.onProjectsQueryFailed));
}
function onProjectsQuerySucceeded(sender, args) {
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
var projectId = oListItem.get_id();
var projectName = oListItem.get_item('Full_x0020_Project_x0020_Name');
var projectUrl = oListItem.get_item('Links');
allProjects.push(projectId + "|" + projectName + "|" + projectUrl);
}
$.each( allProjects, function( key, value ) {
var projectMembers = new ProjectSiteMembers(value);
projectMembers.get_members();
});
}
function onProjectsQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
function ProjectSiteMembers(projectData) {
// console.log(projectData);
var projectValues = projectData.split('|');
this.projectId = projectValues[0];
this.projectName = projectValues[1];
this.projectUrl = projectValues[2];
this.clientContext = null;
this.website = null;
this.membersList = null;
this.collListItemMembers = null;
}
// Define the class methods.
ProjectSiteMembers.prototype = {
onProjectMembersQuerySucceeded: function (sender, args) {
console.log(this.projectId + " - " + this.projectName);
var listItemInfoMember = '';
var listItemMemberEnumerator = this.collListItemMembers.getEnumerator();
while (listItemMemberEnumerator.moveNext()) {
var oListItemMember = listItemMemberEnumerator.get_current();
$ddlMyProjects.append('<option value="' + this.projectId + '">' + this.projectName + '</option>');
return false;
}
},
onProjectMembersQueryFailed: function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
},
get_members: function () {
console.log(this.projectUrl);
this.clientContext = new SP.ClientContext(this.projectUrl);
this.website = this.clientContext.get_web();
this.membersList = this.clientContext.get_web().get_lists().getByTitle('Members')
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml("<View>" +
"<ViewFields>" +
"<FieldRef Name='Member' />" +
"</ViewFields>" +
"<Query>" +
"<Where>" +
"<Eq>" +
"<FieldRef Name='Member' />" +
"<Value Type='Integer'>" +
"<UserID Type='Integer' />" +
" </Value>" +
"</Eq>" +
"</Where>"+
"</Query>" +
"</View>");
this.collListItemMembers = this.membersList.getItems(camlQuery);
this.clientContext.load(this.collListItemMembers );
this.clientContext.executeQueryAsync(Function.createDelegate(this, this.onProjectMembersQuerySucceeded), Function.createDelegate(this, this.onProjectMembersQueryFailed));
}
};