我正在尝试在我的 Google App Engine 应用程序中实现 AJAX,因此我正在寻找一个好的 AJAX 框架来帮助我。有人有什么想法吗?

我正在考虑 Google Web Toolkit,它在为 Google App Engine 创建 AJAX 方面有多好?

有帮助吗?

解决方案

由于 Google Web Toolkit 是 Java 的子集 当你也在后端使用 Java 时,效果最好。由于 Google App Engine 目前 仅限Python 我认为你必须做很多事情才能让你的服务器和客户端能够很好地相互交谈。

jQuery 似乎是最流行的 JavaScript 库选项 DjangoSnippets.com 上的 AJAX 标签.

编辑: 上述情况仅适用于用 Python 编写的 Google App Engine 应用程序。由于 Google App Engine 现在支持 Java,GWT 现在可能是编写 AJAX 前端的不错选择。 谷歌甚至有一个教程告诉你如何做到这一点。

其他提示

使用 AJAX 库的一个好方法是利用 Google 的 AJAX 库 API 服务. 。这比下载 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>

这就是使用 Google 的 API 库所需的全部内容。

以下是我们在 Google App Engine 上实现 Ajax 的方式,但这个想法可以推广到其他平台。

我们有一个用于 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 已经为 Google App Engine 添加了 Java 支持,如果您愿意,您可以在完整的 Google 堆栈上用 Java 开发后端和前端代码。有一个不错的 Eclipse插件 来自 Google 的产品使开发和部署使用 GAE、GWT 或两者的应用程序变得非常容易。

我建议为您的客户端代码寻找一个纯 javascript 框架(可能是 Jquery),并用 python 编写 JSON 服务——这似乎是最简单/最好的方法。

Google Web Toolkit 允许您用 Java 编写 UI 并将其编译为 javascript。正如 Dave 所说,后端使用 Java 可能是更好的选择,因为它对于这种情况有很好的 RPC 挂钩。

您可能想看看睡衣(http://pyjs.org/),即“GWT for Python”。

也尝试一下 GWT 的 GQuery. 。这是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 配合良好。请参阅谷歌的文章“使用 AJAX 启用客户端 RPC 请求”,了解详情。

我目前在我的 GAE 应用程序中使用 JQuery,它对我来说效果很好。我有一个动态图表(谷歌图表),它使用 Ajax 调用来获取 JSON 字符串。这对我来说似乎确实很有效。

Google 最近发布了 Java 版本的 Google App Engine。此版本还提供了 Eclipse 插件,使使用 GWT 开发 GAE 应用程序变得更加容易。

请参阅此处的详细信息: http://code.google.com/appengine/docs/java/overview.html

当然,这需要您用 Java 而不是 Python 重写应用程序,但作为使用过 GWT 的人,让我告诉您,在 AJAX 代码库上使用现代 IDE 的优势是完全值得的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top