Domanda

Sto cercando di implementare AJAX nella mia applicazione Google App Engine, e quindi sto cercando un buon framework AJAX che mi saranno d'aiuto.Qualcuno ha qualche idea?

Sto pensando di Google Web Toolkit, quanto è buono in termini di creazione di AJAX per Google App Engine?

È stato utile?

Soluzione

Come Google Web Toolkit è un sottoinsieme di Java funziona al meglio quando si Java backend troppo.Dal momento che Google App Engine è attualmente Python solo Credo che dovresti fare un sacco di scherzi per ottenere il vostro server e client per parlare bene di ogni altro.

jQuery sembra essere il più popolare libreria JavaScript opzione AJAX Tag DjangoSnippets.com.

Edit: Sopra è vero solo per Google App Engine applicazioni scritte in Python.Come Google App Engine ora supporta Java, GWT ora potrebbe essere una buona scelta per la scrittura di un front-end AJAX. Google anche avere un tutorial che vi mostra come fare.

Altri suggerimenti

Un buon modo è quello di utilizzare una libreria AJAX, è quello di approfittare di AJAX di Google Librerie di servizio API.Questo è un po ' più veloce e più pulito di download JS e metterlo nel vostro /static/ cartella e non mangiare nel vostro disco quota.

In javascript vuoi mettere, per esempio:

google.load("jquery", "1.3.2");

e/o

google.load(google.load("dojo", "1.3.0");

Da qualche parte nell'intestazione si dovrebbe mettere qualcosa di simile a:

<script src="http://www.google.com/jsapi?key=your-key-here"></script>

E tutto ciò che hai bisogno di usare Google librerie API.

Ecco come abbiamo implementato Ajax di Google App Engine, ma l'idea può essere generalizzato ad altre piattaforme.

Abbiamo un gestore di script per le richieste Ajax che risponde -soprattutto - con risposte JSON.La struttura assomiglia a questo (questo è un estratto da una norma GAE gestore di script):

def Get(self, user):
    self.handleRequest()

def Post(self, user):
    self.handleRequest()


def handleRequest(self):        
    '''
    A dictionary that maps an operation name to a command.
    aka: a dispatcher map.
    '''
    operationMap = {'getfriends':               [GetFriendsCommand],
                    'requestfriend':            [RequestFriendCommand, [self.request.get('id')]],
                    'confirmfriend':            [ConfirmFriendCommand, [self.request.get('id')]],
                    'ignorefriendrequest':      [IgnoreFriendRequestCommand, [self.request.get('id')]],
                    'deletefriend':             [DeleteFriendCommand, [self.request.get('id')]]}

    # Delegate the request to the matching command class here.

I comandi sono semplici attuazione del comando pattern:

class Command():
    """ A simple command pattern.
    """
    _valid = False
    def validate(self):
        """ Validates input. Sanitize user input here.
        """
        self._valid = True

    def _do_execute(self):
        """ Executes the command. 
            Override this in subclasses.
        """
        pass

    @property
    def valid(self):
        return self._valid

    def execute(self):
        """ Override _do_execute rather than this.
        """ 
        try:
            self.validate()
        except:
            raise
        return self._do_execute()

    # Make it easy to invoke commands:
    # So command() is equivalent to command.execute()
    __call__ = execute

Sul lato client, ci consente di creare Ajax delegato.Prototype.js questo rende facile da scrivere e da capire.Ecco un estratto:

/** 
 * Ajax API
 *
 * You should create a new instance for every call.
 */
var AjaxAPI = Class.create({
    /* Service URL */
    url: HOME_PATH+"ajax/",

    /* Function to call on results */
    resultCallback: null,

    /* Function to call on faults. Implementation not shown */
    faultCallback: null,

    /* Constructor/Initializer */
    initialize: function(resultCallback, faultCallback){
        this.resultCallback = resultCallback;
        this.faultCallback = faultCallback;
    },

    requestFriend: function(friendId){
        return new Ajax.Request(this.url + '?op=requestFriend', 
        {method: 'post',
         parameters: {'id': friendId},
         onComplete: this.resultCallback
        });     
    },

    getFriends: function(){
        return new Ajax.Request(this.url + '?op=getfriends', 
        {method: 'get',
         onComplete: this.resultCallback
        });    
    }

});

chiamare il delegato, è fare qualcosa di simile:

new AjaxApi(resultHandlerFunction, faultHandlerFunction).getFriends()

Spero che questo aiuta!

Non vi è alcun motivo per cui non uso GAE e Google Web Toolkit (GWT) insieme.Scrivi il tuo backend di codice in Python e il frontend di codice in Java (e forse un po ' di JavaScript), che viene poi compilato in JavaScript.Quando si utilizza un altro framework AJAX, si avrà anche la differenza tra server e client side lingua.

GWT ha caratteristiche che fanno di invocazione remota di codice java sul server più facile, ma questi sono del tutto facoltativo.Si può semplicemente utilizzare JSON o XML interfacce, proprio come con altri framework AJAX.

GWT 1.5 viene fornito anche con JavaScript Tipi di Sovrapposizione, che in pratica consentono di trattare un pezzo di dati JSON come un oggetto Java nello sviluppo di codice lato client.Si può leggere di più su questo qui.

Aggiornamento:

Ora che Google ha aggiunto il supporto Java per Google App Engine, è possibile sviluppare sia backend e frontend codice in Java su un pieno di Google stack - se vi piace.C'è una bella Plugin di Eclipse da Google che lo rende molto facile per sviluppare e distribuire applicazioni che utilizzano GAE, GWT o entrambi.

Mi consiglia di guardare in puro javascript framework (probabilmente Jquery) per il tuo codice lato client, e scrivere JSON servizi in python - che sembra essere il più facile / migliore modo per andare.

Google Web Toolkit che permette di scrivere l'interfaccia utente in Java e compilarlo in javascript.Dave dice, potrebbe essere una scelta migliore, in cui il motore è in Java, come è bello RPC ganci per quel caso.

Si può desiderare di avere uno sguardo al Pigiamahttp://pyjs.org/), che è "GWT per Python".

prova anche GQuery per GWT.Questo è il codice Java:

public void onModuleLoad() { 
    $("div").css("color", "red").click(new Function() { 
        public void f(Element e) { 
            Window.alert("Hello"); 
            $(e).as(Effects).fadeOut(); 
        } 
    }); 
} 

Essendo il codice Java risultante in un po ' costoso in fase di compilazione (Java->JavaScript) ottimizzazioni e più facile per il refactoring.

Bello, no?

jQuery è una biblioteca, ma anche di controllare il Prototipo di framework JavaScript.Si gira veramente del codice JavaScript ogni tanto imbarazzante lingua in una bella ed elegante lingua.

Se si vuole essere in grado di invocare il metodo chiamate da JavaScript, Python, JSON-RPC funziona bene con Google App Engine.Vedi Google con il suo articolo "Utilizzo di AJAX per Abilitare il Client RPC Richieste"per i dettagli.

Attualmente sto usando JQuery per la mia GAE app e funziona a meraviglia per me.Io sono un grafico (google charts) che è dinamico e si avvale di una chiamata Ajax per afferrare una stringa JSON.Sembra davvero funzionare bene per me.

Google ha recentemente annunciato la versione Java di Google App Engine.Questa versione fornisce anche un plugin di Eclipse che facilita lo sviluppo di GAE applicazioni con GWT più facile.

Leggi qui i dettagli: http://code.google.com/appengine/docs/java/overview.html

Naturalmente, sarebbe necessario riscrivere l'applicazione in Java invece di python, ma come qualcuno che ha lavorato con GWT, lasciate che vi dica, i vantaggi dell'utilizzo di un moderno IDE sul tuo AJAX codebase sono vale assolutamente la pena.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top