Подтвердить что ты не робот

Любая хорошая структура AJAX для приложений Google App Engine?

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

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

4b9b3361

Ответ 1

Поскольку 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 даже есть учебное пособие, показывающее, как это сделать.

Ответ 2

Хорошим способом использования библиотеки AJAX является использование API API AJAX для библиотек. Это немного быстрее и чище, чем загрузка 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.

Ответ 3

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

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

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

Update:

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

Ответ 4

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

У нас есть обработчик script для запросов Ajax, которые реагируют почти - с ответами JSON. Структура выглядит примерно так (это выдержка из стандартного обработчика GAE 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.

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

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

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

Ответ 5

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

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

Ответ 6

В моем блоге я имею дело с простым способом сделать это - ссылка: AJAX с Google App Engine. Я включаю весь код javascript и python, который я использовал.

Ответ 7

Возможно, вы захотите посмотреть на Pajamas (http://pyjs.org/), который является "GWT для Python".

Ответ 8

попробуйте также 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) и упрощению рефакторинга.

Приятно, это не?

Ответ 9

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

Ответ 11

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

Ответ 12

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

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

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