Manuel:Ajax

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Ajax and the translation is 100% complete.
Other languages:
English • ‎español • ‎français • ‎polski • ‎português do Brasil • ‎中文 • ‎日本語

MediaWiki offre une interface Ajax obsolète pour être utilisée par les extensions. Ajax est un terme pour utiliser JavaScript à charger des parties de page à la demande. MediaWiki 1.16 est fourni avec jQuery , et par conséquent l'utilisation de Sajax n'est pas recommandée.

Ainsi, le code JavaScript doit utiliser à la place jQuery.ajax() (ou le module JavaScript mediawiki.api). On fera ainsi une requête à l' API MediaWiki sur AJAX (au lieu de action=ajax ).

Détails

Demandes asynchrones

Une requête dite asynchrone envoie ses données vers le serveur, puis continue son exécution. Quelques temps après, le serveur peut renvoyer une réponse (selon le type de la requête qu'il a reçue), auquel cas celle-ci sera transmise à une fonction JavaScript pour être traitée. Une autre fonction peut être fournie pour gérer les cas où la requête échoue pour une raison quelconque. Vous trouverez ci-dessous un exemple d'appel à l'API de connexion avec l'envoi du nom d'utilisateur et du mot de passe.

mw.loader.using( 'mediawiki.api', function () {
	( new mw.Api() ).get( {
		action: 'query',
		lgname: 'foo',
		lgpassword: 'foobar'
	} ).done( function ( data ) {
		alert( data );
	} );
} );

Alternativement vous pouvez utiliser les fonctions jQuery directement :

$.ajax({
        // request type ( GET or POST )
	type: "GET",
        
        // the URL to which the request is sent
	url: mw.util.wikiScript('api'),
        
        // data to be sent to the server
	data: { action:'query', format:'json', lgname:'foo', lgpassword:'foobar' },
        
        // The type of data that you're expecting back from the server
	dataType: 'json',
        
        // Function to be called if the request succeeds
	success: function( jsondata ){
		alert( jsondata.result );
	}
});

La fonction « mw.util.wikiScript » n'est disponible que depuis la version 1.18 .

Requêtes synchronisées

L'autre type de requête (les requêtes synchrones) consiste à envoyer des données au serveur et à attendre la réponse. Cela signifie que JavaScript restera bloqué le temps que le serveur renvoie des données, ou que la requête échoue pour quelque raison. L'exemple suivant récupère la liste des modèles de « Pages liées » :

whatLinksHere = JSON.parse(
    $.ajax({
        url:mw.util.wikiScript('api'),
        data: { action: 'query', format: 'json', list: 'embeddedin', eititle: 'Template:' + templateName, eilimit: 500 },
        async:false
    })
    .responseText
);

// ... usage ...
for (i=0; i<whatLinksHere.query.embeddedin.length; i+=1) {
    alert(whatLinksHere.query.embeddedin[i]);
}

(JSON.parse() is a JavaScript standard function that returns an object from its string representation in JSON format.)

Limitations

A cause de la règle sur la même origine, il est difficile pour un script qui se trouve sur un site extérieur, de récupérer les données d'un wiki qui n'est pas hébergé sur le même domaine — par exemple, on ne peut pas directement récupérer les données de https://en.wikipedia.org/wiki/ pour http://example.org/wiki/. Les navigateurs les plus récents prennent en charge une instruction explicite pour permettre cet accès via le partage des ressources entre différentes origines mais ceci ne fonctionnera qu'avec des serveurs configurés pour générer les entêtes appropriés, que le navigateur récent de l'utilisateur devra reconnaître. Les développeurs qui ont des problèmes avec les anciens navigateurs ne peuvent pas encore utiliser CORS.

Il est possible de contourner la règle de la même origine en utilisant JSONP au lieu du JSON brut qui fonctionnera sur les navigateurs plus anciens (y compris Internet Explorer 6).

$.ajax({
    url: '//www.mediawiki.org/w/api.php?format=jsonty&action=query&meta=siteinfo&siprop=general&callback=?',
    data: {
        format: 'json'
    },
    dataType: 'jsonp'
}).done( function ( data ) {
    ...
} );

Fonctionnalités associées obsolètes

Sajax est une ancienne bibliothèque Ajax qui (depuis septembre 2012) fait encore partie du code du noyau et qui est utilisée par quelques extensions. Ne l'utilisez pas, remplacez la par jQuery.ajax(). Certaines extensions au lieu d'utiliser Sajax ou pas, font des appels Ajax via le AjaxDispatcher qui est obsolète (voir $wgAjaxExportList) en invoquant index.php?action=ajax&rs=something.... Elles doivent les remplacer par des requêtes à l'API MediaWiki pour les modules correspondants de l'API api.php?action=something.

Voir aussi

Liens externes

General information on XMLHttpRequest: