AJAX
AJAX (Asynchronous JavaScript and XML) est un groupe de techniques de développement côté client interdépendantes utilisées pour créer des applications Web asynchrones.
AJAX permet aux applications Web d’envoyer et de récupérer des informations vers et depuis un serveur en arrière-plan, sans impact sur l’expérience utilisateur avec la page Web affichée.
GlideAjax
La classe GlideAjax permet l’exécution de code côté serveur à partir du client. Les appels GlideAjax transmettent des paramètres aux script includes et, à l’aide de conventions de nommage, permettent l’utilisation de ces paramètres.
- Initialisez GlideAjax avec le nom du script include que vous souhaitez utiliser.
- Lors de la création du script include, vous devez définir le champ nom comme étant exactement le même que le nom de classe.
- Lors de la création du script include, vous devez cocher la case Client pouvant être appelé .
- Spécifiez le paramètre sysparm_name. GlideAjax utilise sysparm_name pour trouver la fonction à utiliser.
- Tous les paramètres supplémentaires peuvent être transmis, qui doivent tous commencer par sysparm_. Évitez d’utiliser des noms de paramètres prédéfinis :
- sysparm_name
- sysparm_function
- sysparm_value
- sysparm_type
- Le code est ensuite exécuté avec les fonctions getXML() ou getXMLWait().
Pour plus d’informations, reportez-vous à l’API GlideAjax .
Exemples de GlideAjax asynchrone
Le script GlideAjax asynchrone comporte deux parties : le code côté client et le code côté serveur.
Hello World : renvoi d’une valeur à partir du serveur
Côté client
Ce code s’exécute sur le client (le navigateur web). Créez un script client comme d’habitude. Cela envoie les paramètres au serveur, qui effectue ensuite le traitement. Pour que le client n’attende pas le résultat, une fonction de rappel est utilisée pour retourner le résultat, passée à la fonction getXML(). (Dans ce cas, il s’appelle HelloWorldParse.)
var ga = new GlideAjax('HelloWorld');
ga.addParam('sysparm_name', 'helloWorld');
ga.addParam('sysparm_user_name', "Bob");
ga.getXML(HelloWorldParse);
function HelloWorldParse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer); }Côté serveur
HelloWorld.- Le code sys_script_include doit étendre la classe AbstractAjaxProcessor et être appelable par le client.
- Les noms de fonction commençant par « _ » sont considérés comme privés et ne peuvent pas être appelés à partir du client.
- Évitez de remplacer les méthodes de AbstractAjaxProcessor, y compris
initialize. Bien qu’il soit possible d’invoquer les méthodes de votre objet superclass que vous avez écrasées, c’est compliqué et il vaut mieux l’éviter.
var HelloWorld = Class.create();
HelloWorld.prototype = Object.extendsObject(AbstractAjaxProcessor, {
helloWorld:function() { return "Hello " + this.getParameter('sysparm_user_name') + "!"; } ,
_privateFunction: function() { // this function is not client callable
}
});Il en résulte une boîte d’alerte qui dit « Bonjour Bob ! » lorsque vous visitez le formulaire.Renvoi de plusieurs valeurs
Étant donné que la réponse est un document XML, nous ne sommes pas limités à renvoyer une seule valeur de réponse . Voici un exemple plus complexe renvoyant plusieurs nœuds et attributs XML.
Script include du processeur AJAX
/*
* MyFavoritesAjax script include Description - sample AJAX processor returning multiple value pairs
*/
var MyFavoritesAjax = Class.create();
MyFavoritesAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {
/*
* method available to client scripts call using:
* var gajax = new GlideAjax("MyFavoritesAjax");
* gajax.addParam("sysparm_name","getFavorites");
*/
getFavorites: function() { // build new response xml element for result
var result = this.newItem("result");
result.setAttribute("message","returning all favorites");
//add some favorite nodes with name and value attributes
this._addFavorite("color","blue");
this._addFavorite("beer","lager");
this._addFavorite("pet","dog");
},
// all items are returned to the client through the inherited methods of AbstractAjaxProcessor
_addFavorite: function(name, value) {
var favs = this.newItem("favorite");
favs.setAttribute("name",name);
favs.setAttribute("value",value); },
type:"MyFavoritesAjax"
});
Script client
// new GlideAjax object referencing name of AJAX script include
var ga = new GlideAjax("MyFavoritesAjax");
// add name parameter to define which function we want to call
// method name in script include will be getFavorites
ga.addParam("sysparm_name","getFavorites");
// submit request to server, call ajaxResponse function with server response
ga.getXML(ajaxResponse);
function ajaxResponse(serverResponse) {
// get result element and attributes
var result = serverResponse.responseXML.getElementsByTagName("result");
var message = result[0].getAttribute("message");
//check for message attribute and alert user
if(message) alert(message);
//build output to display on client for testing
var output = "";
// get favorite elements
var favorites = serverResponse.responseXML.getElementsByTagName("favorite");
for(var i = 0; i < favorites.length; i ++) {
var name = favorites[i].getAttribute("name");
var value = favorites[i].getAttribute("value");
output += name + " = " + value + "\n "; }
alert(output); }
Réponse XML
<xml sysparm_max= "15" sysparm_name="getFavorites" sysparm_processor="MyFavoritesAjax">
<result message = "returning all favorites"></result>
<favorite name = "color" value = "blue"></favorite>
<favorite name = "beer" value = "lager"></favorite>
<favorite name = "pet" value = "dog"></favorite>
</xml>
Exemples de GlideAjax synchrone
Utilisez synchrone lorsque votre script ne peut pas continuer sans la réponse GlideAjax . Cela arrête la session jusqu’à ce que la réponse soit reçue.
Si votre cas d’utilisation exige qu’aucun traitement ultérieur ne puisse avoir lieu tant que la réponse GlideAjax n’a pas été reçue, vous pouvez utiliser getXMLWait(). Cependant, étant donné que cela ralentira votre code et verrouillera la session utilisateur jusqu’à ce que la réponse soit reçue, il est généralement recommandé d’utiliser getXML() avec une fonction de rappel.
Ce code génère une alerte côté client qui affiche The Server Says Hello Bob !.
var ga = new GlideAjax('HelloWorld') ;
ga.addParam('sysparm_name','helloWorld');
ga.addParam('sysparm_user_name',"Bob");
ga.getXMLWait();
alert(ga.getAnswer());var HelloWorld = Class.create();
HelloWorld.prototype = Object.extendsObject(AbstractAjaxProcessor, {
helloWorld: function()
{ return "The Server Says Hello " + this.getParameter('sysparm_user_name') + "!"; } } );AJAXClientHelper (en anglais seulement)
Fournit des fonctions d’aide pour que les clients Ajax récupèrent une valeur à partir d’un client Ajax.
Où l’utiliser ?
Utilisez ce script include partout où vous avez besoin de récupérer une valeur à partir d’un client Ajax.
Résumé de la méthode
| Résumé de la méthode | Description |
|---|---|
| getDisplay() | Obtient la valeur d’affichage de la liste de choix. |
Détail de la méthode
| Méthode API | Description | Paramètres d'entrée | Retours de sortie |
|---|---|---|---|
| getDisplay() | Obtient la valeur d’affichage de la liste de choix. | aucun | La valeur d’affichage. |
Curl
// getDisplay
(function(table, sysId) {
var ga = new GlideAjax('AjaxClientHelper');
ga.addParam("sysparm_name", "getDisplay");
ga.addParam('sysparm_table', 'incident');
ga.addParam('sysparm_value', "0598b22b877313003c1c8467a7cb0b71");
ga.getXMLWait();
return ga.getAnswer();
}("incident", "0598b22b877313003c1c8467a7cb0b71")); // Returns 'INC0010001'