AJAX
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.
- 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 die zu verwendende Funktion zu finden.
- 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 in der 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.)
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
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.
Dieser Code löst eine clientseitige Warnung mit dem Text The Server Says Hello Bob! aus.
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
Stellt Hilfsfunktionen für Ajax-Clients bereit, um einen Wert von einem Ajax-Client abzurufen.
Verwendungszweck
Verwenden Sie diese Skripteinbindung überall dort, wo 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'