Есть ли хорошая платформа AJAX для приложений Google App Engine?[закрыто]

StackOverflow https://stackoverflow.com/questions/53997

  •  09-06-2019
  •  | 
  •  

Вопрос

Я пытаюсь реализовать AJAX в своем приложении Google App Engine и поэтому ищу хорошую среду AJAX, которая мне поможет.У кого-нибудь есть идеи?

Я думаю о Google Web Toolkit, насколько он хорош с точки зрения создания AJAX для Google App Engine?

Это было полезно?

Решение

Поскольку Google Web Toolkit представляет собой подмножество Java лучше всего это работает, когда вы используете Java и на бэкэнде.Поскольку Google App Engine в настоящее время только Python Я думаю, вам придется немало повозиться, чтобы ваш сервер и клиент могли хорошо общаться друг с другом.

jQuery, по-видимому, является самым популярным вариантом библиотеки JavaScript в мире. Тег AJAX на DjangoSnippets.com.

Редактировать: Вышеупомянутое справедливо только для приложений Google App Engine, написанных на Python.Поскольку Google App Engine теперь поддерживает Java, GWT теперь может стать хорошим выбором для написания внешнего интерфейса AJAX. У Google даже есть руководство, показывающее, как это сделать.

Другие советы

Хороший способ — использовать библиотеку AJAX, чтобы воспользоваться преимуществами Служба API библиотек AJAX Google.Это немного быстрее и чище, чем загружать JS и помещать его в свой /static/ папку и не занимает дисковую квоту.

В вашем javascript вы бы просто поместили, например:

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

и/или

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

Где-нибудь в заголовке вы бы поместили что-то вроде:

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

И это все, что вам нужно для использования библиотек API Google.

Вот как мы реализовали Ajax в Google App Engine, но эту идею можно распространить и на другие платформы.

У нас есть сценарий-обработчик для запросов Ajax, который отвечает, в основном, ответами JSON.Структура выглядит примерно так (это отрывок из стандартного скрипта-обработчика GAE):

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.

Команды представляют собой простую реализацию шаблона команды:

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

На стороне клиента мы создаем делегат Ajax.Prototype.js упрощает написание и понимание.Вот отрывок:

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

});

чтобы вызвать делегата, вы делаете что-то вроде:

new AjaxApi(resultHandlerFunction, faultHandlerFunction).getFriends()

Надеюсь, это поможет!

Нет причин, по которым вам не следует использовать GAE и Google Web Toolkit (GWT) вместе.Вы пишете свой внутренний код на Python, а внешний — на Java (и, возможно, немного на JavaScript), который затем компилируется в JavaScript.При использовании другой платформы AJAX вы также увидите разницу между языком сервера и клиента.

В GWT есть функции, упрощающие удаленный вызов Java-кода на сервере, но они совершенно необязательны.Вы можете просто использовать интерфейсы JSON или XML, как и в других платформах AJAX.

GWT 1.5 также поставляется с типами наложения JavaScript, которые по сути позволяют вам обрабатывать часть данных JSON как объект Java при разработке кода на стороне клиента.Вы можете прочитать больше об этом здесь.

Обновлять:

Теперь, когда Google добавил поддержку Java для Google App Engine, вы можете разрабатывать как внутренний, так и внешний код на Java в полном стеке Google — если хотите.Есть хороший Плагин Eclipse от Google, что упрощает разработку и развертывание приложений, использующих GAE, GWT или оба.

Я бы порекомендовал изучить чистый Javascript-фреймворк (вероятно, Jquery) для вашего клиентского кода и написать сервисы JSON на Python - это кажется самым простым/лучшим способом.

Google Web Toolkit позволяет написать пользовательский интерфейс на Java и скомпилировать его в JavaScript.Как говорит Дэйв, это может быть лучшим выбором, если серверная часть выполнена на Java, поскольку для этого случая у нее есть хорошие перехватчики RPC.

Возможно, вы захотите взглянуть на Пижамы (http://pyjs.org/), то есть «GWT для Python».

попробуйте также GQuery для GWT.Это Java-код:

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

Будучи кодом Java, результатом является несколько дорогостоящая оптимизация времени компиляции (Java->JavaScript) и упрощение рефакторинга.

Приятно, не так ли?

jQuery — прекрасная библиотека, но также обратите внимание на Прототип JavaScript-фреймворка.Это действительно превращает JavaScript из иногда неудобного языка в красивый и элегантный язык.

Если вы хотите иметь возможность вызывать вызовы методов из JavaScript в Python, JSON-RPC хорошо работает с Google App Engine.См. статью Google "Использование AJAX для включения клиентских запросов RPC", подробнее.

В настоящее время я использую JQuery для своего приложения GAE, и он прекрасно работает для меня.У меня есть динамическая диаграмма (диаграммы Google), которая использует вызов Ajax для получения строки JSON.Кажется, у меня это действительно работает нормально.

Недавно Google анонсировала Java-версию Google App Engine.В этом выпуске также представлен плагин Eclipse, который упрощает разработку приложений GAE с помощью GWT.

Подробности смотрите здесь: http://code.google.com/appengine/docs/java/overview.html

Конечно, вам придется переписать свое приложение на Java вместо Python, но как человек, работавший с GWT, позвольте мне сказать вам, что преимущества использования современной IDE в вашей кодовой базе AJAX полностью того стоят.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top