I would suggest to do not reinvent the wheel resolve personal site url from user login name directly instead of constructing the url to display form of User Information list (/_layouts/15/userdisp?ID=<user id>
).
The following example demonstrates how to retrieve user personal site url:
function navigateToPersonalSite()
{
SP.SOD.registerSod('SP.ClientContext', SP.Utilities.Utility.getLayoutsPageUrl('sp.js'));
SP.SOD.registerSod('SP.UserProfiles.PeopleManager', SP.Utilities.Utility.getLayoutsPageUrl('sp.userprofiles.js'));
SP.SOD.loadMultiple(['SP.ClientContext', 'SP.UserProfiles.PeopleManager'], function(){
getUserProperies(loginName,
function(properties){
var url = properties.get_personalUrl();
window.location.href = url;
},
function(sender, args) {
//handle errors...
}
);
});
}
function getUserProperies(loginName,success,failed)
{
var ctx = new SP.ClientContext.get_current();
var peopleManager = new SP.UserProfiles.PeopleManager(ctx);
var properties = peopleManager.getPropertiesFor(loginName);
ctx.load(properties);
ctx.executeQueryAsync(
function(){
success(properties);
},
failed);
}
Usage
var loginName = "i:0#.f|membership|[email protected]";
navigateToPersonalSite(loginName);