Je développe une solution de ferme (confiance totale) avec quelques WebParts faits sur commande. Pour un WebPart je veux un peu de comportement ajax, donc j'ai pensé: Pourquoi ne pas utiliser l'API JSOM? Ma partie web veux juste récupérer les nouvelles annonces, donc j'ajouté une nouvelle webpart (Solution Farm), du code HTML et le javascript suivantComment appeler l'API Sharepoint 2013 par javascript en toute confiance?
<script src="//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js" type="text/javascript"></script>
<script type="text/javascript">
function retrieveListItems() {
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function() {
var ctx = SP.ClientContext.get_current();
var web = ctx.get_web();
var list = web.get_lists().getByTitle("Announcements");
ctx.load(list);
ctx.executeQueryAsync(
function() {
console.log(list.get_title());
},
function (sender, args) {
console.log(args.get_message());
}
);
});
}
dans mon html j'ai un lien pour appeler le fonction js:
<a onclick="retrieveListItems(); return false;">Call</a>
Quand j'appelle la fonction que je reçois une erreur 403 INTERDIT, la console Google Chrome me montre les éléments suivants
/_vti_bin/client.svc/ProcessQuery 403 (FORBIDDEN)
executeRequest @ MicrosoftAjax.js:5
executeRequest @ MicrosoftAjax.js:5
invoke @ MicrosoftAjax.js:5
$31_0 @ sp.runtime.js:2
executeClientRequestAsync @ sp.runtime.js:2
executeQueryAsync @ sp.runtime.js:2
retrieveListItems @ default.aspx:1091
onclick @ default.aspx:1118
Et dans l'onglet Réseau de la console Google Chrome, dans la PREVIEW (réponse) i voir les suivants
[{SchemaVersion: "15.0.0.0", LibraryVersion: "15.0.4420.1017", ErrorInfo: {,…},…}]
0:{SchemaVersion: "15.0.0.0", LibraryVersion: "15.0.4420.1017", ErrorInfo: {,…},…}
ErrorInfo:{,…}
ErrorCode:-2130575251
ErrorMessage:"A validação de segurança para esta página não é válida e pode estar corrompida. Use o botão Voltar do navegador da Web para tentar realizar a operação novamente."
TRANSLATING: The security validation for this page is invalid and might be corrupted. Please use your web browser's Back button to try your operation again.
ErrorTypeName:"Microsoft.SharePoint.SPException"
ErrorValue:null
TraceCorrelationId:"78edb09d-fb1d-7012-0000-026d47d0154a"
LibraryVersion:"15.0.4420.1017"
SchemaVersion:"15.0.0.0"
TraceCorrelationId:"78edb09d-fb1d-7012-0000-026d47d0154a"
je fais quelques recherches que j'ai trouvé quelque chose lié avec FormDigest, donc je cherchai mon code HTML pour le __REQUESTDIGEST et copié sa valeur, appelé la fonction et s'est rendu compte que le résumé envoyé est différent. Cela pourrait être la source du problème?
je fais plus de recherche et trouvé cette js fonction qui triche le RequestDigest:
function CustomUpdateFormDigest() {
if (window._spPageContextInfo != null) {
var $v_2 = window._spPageContextInfo;
var $v_3 = $v_2.webServerRelativeUrl;
var $v_4 = window._spFormDigestRefreshInterval;
UpdateFormDigest($v_3, $v_4);
}
}
l'appelions appeler avant ma fonction retrieveListItems(), mais il ne fonctionne pas. Tout le monde peut me diriger vers la bonne direction? c'est vraiment un problème de digest?
EDIT: Je me suis rendu compte que si ma page a mon partie Web j'obtiens l'erreur quand je clique dans le lien ET si j'exécute le manuscrit dans la console de google chrome. Si je supprime mon webpart de la page, je peux exécuter le script dans Google Chrome Console avec succès.
J'ai réalisé que si j'appelle ma fonction dans la console Google Chrome dans ma "page d'accueil" je reçois l'erreur interdite, mais je l'appelle dans la page "Contenu du site", cela fonctionne – Ewerton