El wrapper safeAjax para llamar a la Web API de Power Pages
Las llamadas a /_api/ que escriben datos necesitan el token anti-falsificación (__RequestVerificationToken). Microsoft propone un pequeño wrapper sobre $.ajax que lo añade por ti, y yo lo pongo en el Header del sitio para tenerlo disponible en todas las páginas:
(function (utilities, $) {
function safeAjax(ajaxOptions) {
const deferredAjax = $.Deferred();
shell.getTokenDeferred().done(function (token) {
ajaxOptions.headers = ajaxOptions.headers || {};
ajaxOptions.headers["__RequestVerificationToken"] = token;
$.ajax(ajaxOptions)
.done(function (data, textStatus, jqXHR) {
validateLoginSession(data, textStatus, jqXHR, deferredAjax.resolve);
})
.fail(deferredAjax.reject);
}).fail(function () {
deferredAjax.rejectWith(this, arguments);
});
return deferredAjax.promise();
}
utilities.safeAjax = safeAjax;
})((window.utilities = window.utilities || {}), jQuery);A partir de ahí, desde cualquier página haces utilities.safeAjax({ type: "PATCH", url: "/_api/accounts(" + id + ")", ... }).
No tienes que definir shell.getTokenDeferred() ni validateLoginSession, los dos vienen con el propio Power Pages. El segundo, además, redirige al login si la sesión del usuario ha caducado.
Un aviso por experiencia: algunos bloqueadores de anuncios cortan estas peticiones. Si al probar parece que no pasa nada, desactiva el Adblock antes de ponerte a revisar el código línea a línea.