AJAX

  • Rversion finale: Xanadu
  • Mis à jour 1 août 2024
  • 5 minutes de lecture
  • AJAX (JavaScript et XML asynchrones) 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 includes de script et, en utilisant les conventions de nommage, permettent l’utilisation de ces paramètres.

    Remarque :
    Cette fonctionnalité nécessite une connaissance de JavaScript.
    Utilisation de GlideAjax :
    • Initialisez GlideAjax avec le nom du script include que vous souhaitez utiliser.
    • Lors de la création de l’include de script, vous devez définir le champ nom de manière à ce qu’il soit exactement identique au nom de classe.
    • Lors de la création de l’include de script, vous devez activer 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, consultez l’API GlideAjax .

    Exemples de GlideAjax asynchrone

    Le script GlideAjax asynchrone se compose de deux parties : le code côté client et le code côté serveur.

    Hello World : retour 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é à la fonction getXML(). (Dans ce cas, il s’appelle HelloWorldParse.)

    La fonction getXMLWait() n’a pas besoin d’une fonction de rappel séparée, mais cela bloquera le client. Si la communication client-serveur prend beaucoup de temps (par exemple sur des réseaux lents), l’application semblera peu réactive et lente. Un exemple de getXMLWait() se trouve dans la section suivante.
    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

    Code côté serveur pour la fonction ci-dessus. Ne pas créer de règle métier, mais accéder à Définition du système > Script include et créez un nouveau script. Collez le code ci-dessous.
    Remarque :
    Vous devez définir le nom de l’include de script sur HelloWorld.
    • Le code sys_script_include doit étendre la classe AbstractAjaxProcessor et être appelable par le client.
    • Les noms de fonctions 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 des méthodes de votre objet superclass que vous avez remplacé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 consultez le formulaire.

    Renvoi de valeurs multiples

    É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 . La session s’arrête jusqu’à ce que la réponse soit reçue.

    Si votre cas d’utilisation exige qu’aucun traitement supplémentaire ne puisse avoir lieu tant que la réponse GlideAjax n’a pas été reçue, vous pouvez utiliser getXMLWait(). Cependant, comme cela ralentit votre code et verrouille 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.

    Remarque :
    N’utilisez pas AJAXEvaluateSynchronous.

    La méthode getXMLWait() n’est pas disponible dans les applications incluses dans le périmètre.

    Ce code entraîne une alerte côté client qui affiche The Server Says Hello Bob !.

    Le code client.
    var ga = new GlideAjax('HelloWorld') ;
    ga.addParam('sysparm_name','helloWorld');
    ga.addParam('sysparm_user_name',"Bob");
    ga.getXMLWait(); 
    alert(ga.getAnswer());
    Le code d’include de script côté serveur.
    var HelloWorld = Class.create();
    HelloWorld.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    helloWorld: function() 
     { return "The Server Says Hello " + this.getParameter('sysparm_user_name') + "!"; } } );

    AJAXClientHelper

    Fournit des fonctions d’aide pour que les clients Ajax puissent récupérer une valeur à partir d’un client Ajax.

    Où l’utiliser ?

    Utilisez cet include de script 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 à partir 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 à partir de la liste de choix. aucun La valeur d’affichage.

    Friser

    // 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'