AJAX

  • Freigeben Version: Xanadu
  • Aktualisiert 1. August 2024
  • 5 Minuten Lesedauer
  • AJAX (Asynchronous JavaScript And XML) ist eine Gruppe in Wechselbeziehungen stehender clientseitiger Entwicklungstechniken, mit denen asynchrone Webanwendungen erstellt werden.

    Mit AJAX können Webanwendungen Informationen im Hintergrund an Server senden und von Servern abrufen, ohne die Benutzererfahrung auf der angezeigten Webseite zu beeinträchtigen.

    GlideAjax

    Die Klasse GlideAjax ermöglicht es, serverseitigen Code über den Client auszuführen. Aufrufe des Typs GlideAjax übergeben Parameter an die Skripteinbindungen und ermöglichen die Verwendung dieser Parameter über Namenskonventionen.

    Hinweis:
    Diese Funktionalität erfordert Kenntnisse in JavaScript.
    So verwenden Sie GlideAjax:
    • Initialisieren Sie GlideAjax mit dem Namen der Skripteinbindung, die Sie verwenden möchten.
    • Bei der Erstellung der Skripteinbindung muss der Wert im Namensfeld exakt dem Namen der Klasse entsprechen.
    • Bei der Erstellung der Skripteinbindung müssen Sie die Checkbox Aufrufbares Client-Element aktivieren.
    • Geben Sie den Parameter sysparm_namean. GlideAjax verwendet sysparm_name, um zu finden, welche Funktion verwendet werden soll.
    • Es können beliebige zusätzliche Parameter übergeben werden, die alle mit sysparm_beginnen müssen. Vermeiden Sie vordefinierte Parameternamen wie:
      • sysparm_name
      • sysparm_function
      • sysparm_value
      • sysparm_type
    • Der Code wird dann mit der Funktion getXML() oder der Funktion getXMLWait() ausgeführt.

    Weitere Informationen finden Sie unter GlideAjax- API.

    Beispiele für asynchrone Skripts des Typs „GlideAjax“

    Asynchrone Skripts des Typs GlideAjax bestehen aus zwei Teilen: clientseitigem und serverseitigem Code.

    Hello World: Werte vom Server zurückgeben

    Client-Seite

    Dieser Code wird auf dem Client ausgeführt (d. h. im Webbrowser). Erstellen Sie auf üblichem Wege ein Client-Skript . Das Skript sendet die Parameter an den Server, der sie verarbeitet. Damit der Client nicht auf das Ergebnis wartet, wird eine Rückruffunktion verwendet, um das Ergebnis zurückzugeben und an die Funktion getXML() zu übergeben. (In diesem Beispiel heißt die Funktion HelloWorldParse.)

    Die Funktion getXMLWait() benötigt keine separate Rückruffunktion, blockiert allerdings den Client. Wenn die Client-Server-Kommunikation lange dauert (z. B. in langsamen Netzwerken), scheint es so, als reagiere die Anwendung nicht mehr oder nur langsam. Ein Beispiel für getXMLWait() finden Sie im nächsten Abschnitt.
    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); }

    Serverseite

    In diesem Abschnitt sehen Sie den serverseitigen Code der oben genannten Funktion. Erstellen Sie keine Geschäftsregel, sondern navigieren Sie zu Systemdefinition > Skripteinbindung und erstellen Sie ein neues Skript. Fügen Sie das Skript in den unten aufgeführten Code ein.
    Hinweis:
    Als Namen für die Skripteinbindung müssen Sie HelloWorld festlegen.
    • Der Code sys_script_include muss die Klasse AbstractAjaxProcessor erweitern und vom Client aufrufbar sein.
    • Funktionsnamen, die mit „_“ beginnen, werden als privat betrachtet und können nicht vom Client aufgerufen werden.
    • Vermeiden Sie es, Methoden von AbstractAjaxProcessor zu überschreiben. Das gilt auch für initialize. Zwar ist es möglich, überschriebene Methoden eines Objekts einer übergeordneten Klasse aufzurufen. Das ist jedoch kompliziert und sollte am besten vermieden werden.
    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     
        }
     });
    Dieser Code zeigt ein Warnungsfeld „Hello Bob!“ an, sobald Sie das Formular aufrufen.

    Mehrere Werte zurückgeben

    Da es sich bei der Antwort um ein XML-Dokument handelt, sind wir nicht auf die Rückgabe eines einzelnen Werts des Typs answer beschränkt. Nachfolgend sehen Sie ein komplexeres Beispiel, das mehrere XML-Knoten und -Attribute zurückgibt.

    AJAX-Prozessor-Skripteinbindung

    /*
     * 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"
     
     });

    Client-Skript

    // 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); }

    XML-Antwort

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

    Beispiele für synchrone Aufrufe des Typs „GlideAjax“

    Verwenden Sie synchrone Aufrufe, wenn die Ausführung des Skripts ohne die Antwort von GlideAjax nicht fortgesetzt werden kann. Die Sitzung wird dann angehalten, bis die Antwort empfangen wird.

    Wenn Ihr Anwendungsfall verlangt, dass bis zum Eingang der Antwort von GlideAjax keine weitere Verarbeitung erfolgen darf, können Sie getXMLWait() verwenden. Da dies jedoch den Code verlangsamt und die Benutzersitzung bis zum Eingang der Antwort sperrt, empfehlen wir generell die Verwendung von getXML() mit einer Rückruffunktion.

    Hinweis:
    Verwenden Sie nicht AJAXEvaluateSynchronously.

    Die Methode getXMLWait() ist in Anwendungen mit Bereich nicht verfügbar.

    Dieser Code löst eine clientseitige Warnung mit dem Text The Server Says Hello Bob! aus.

    Der Client-Code:
    var ga = new GlideAjax('HelloWorld') ;
    ga.addParam('sysparm_name','helloWorld');
    ga.addParam('sysparm_user_name',"Bob");
    ga.getXMLWait(); 
    alert(ga.getAnswer());
    Der serverseitige Skripteinbindungscode:
    var HelloWorld = Class.create();
    HelloWorld.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    helloWorld: function() 
     { return "The Server Says Hello " + this.getParameter('sysparm_user_name') + "!"; } } );

    AJAXClientHelper

    Stellt Hilfsfunktionen für Ajax-Clients bereit, um einen Wert von einem Ajax-Client abzurufen.

    Verwendungszweck

    Verwenden Sie diese Skripteinbindung immer dann, wenn Sie einen Wert von einem Ajax-Client abrufen müssen.

    Methodenübersicht

    Methodenübersicht Beschreibung
    getDisplay() Ruft den Anzeigewert aus der Auswahlliste ab.

    Methodendetail

    API-Methode Beschreibung Eingabeparameter Zurückgegebene Ausgabe
    getDisplay() Ruft den Anzeigewert aus der Auswahlliste ab. Keine Der Anzeigewert.

    Locken

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