适用于Google App Engine应用程序的任何优秀AJAX框架?

时间:2008-09-10 13:12:07

标签: python ajax google-app-engine

我正在尝试在我的Google App Engine应用程序中实现AJAX,因此我正在寻找一个可以帮助我的优秀AJAX框架。任何人都有任何想法?

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

11 个答案:

答案 0 :(得分:12)

由于Google Web Toolkit是subset of Java,因此在后端使用Java时效果最佳。由于谷歌应用引擎目前是Python only,我认为你必须做很多让你的服务器和客户端相互通话的麻烦。

jQuery似乎是AJAX Tag at DjangoSnippets.com中最受欢迎的JavaScript库选项。

修改:以上仅适用于使用Python编写的Google App Engine应用程序。由于Google App Engine现在支持Java,因此GWT现在可以成为编写AJAX前端的不错选择。 Google even have a tutorial showing you how to do it.

答案 1 :(得分:7)

一个很好的方法是使用AJAX库来利用Google's AJAX Libraries API service。这比下载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库所需的一切。

答案 2 :(得分:4)

没有理由不将GAE和Google Web Toolkit(GWT)结合使用。您使用Python编写后端代码,使用Java编写前端代码(可能还有一些JavaScript),然后编译为JavaScript。使用另一个AJAX框架时,服务器端和客户端语言之间也存在差异。

GWT具有使服务器上的Java代码远程调用更容易的功能,但这些功能完全是可选的。您可以使用JSON或XML接口,就像使用其他AJAX框架一样。

GWT 1.5还附带了JavaScript Overlay Types,它基本上允许您在开发客户端代码时处理一些JSON数据,如Java对象。您可以阅读有关此here的更多信息。

<强>更新

现在Google已经为Google App Engine添加了Java支持,如果您愿意,可以在完整的Google堆栈上使用Java开发后端和前端代码。谷歌有一个很好的Eclipse plugin,可以很容易地开发和部署使用GAE,GWT或两者的应用程序。

答案 3 :(得分:4)

以下是我们如何在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()

我希望这有帮助!

答案 4 :(得分:3)

我建议你为你的客户端代码寻找一个纯粹的javascript框架(可能是Jquery),并在python中编写JSON服务 - 这似乎是最容易/最好的方式。

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

答案 5 :(得分:2)

你可能想看一下睡衣(http://pyjs.org/),这是“GWT for Python”。

答案 6 :(得分:2)

也尝试GQuery for 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)优化并且更容易重构。

很好,不是吗?

答案 7 :(得分:1)

jQuery是一个很好的库,但也可以查看Prototype JavaScript framework。它确实将JavaScript从偶尔笨拙的语言转变为美丽而优雅的语言。

答案 8 :(得分:0)

如果您希望能够调用从JavaScript到Python的方法调用,JSON-RPC可以很好地与Google App Engine配合使用。有关详细信息,请参阅Google的文章“Using AJAX to Enable Client RPC Requests”。

答案 9 :(得分:0)

我目前正在使用JQuery作为我的GAE应用程序,它对我来说非常有效。我有一个动态的图表(谷歌图表),并使用Ajax调用来获取JSON字符串。它似乎对我来说很好。

答案 10 :(得分:0)

谷歌最近宣布推出Java版Google App Engine。此版本还提供了一个Eclipse插件,可以更轻松地使用GWT开发GAE应用程序。

请在此处查看详细信息:http://code.google.com/appengine/docs/java/overview.html

当然,它需要你用Java而不是python重写你的应用程序,但是作为一个使用GWT的人,让我告诉你,在你的AJAX代码库上使用现代IDE的优势是值得的。< / p>