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

时间:2020-03-05 18:50:42  来源:igfitidea点击:

我正在尝试在Google App Engine应用程序中实现AJAX,因此我正在寻找一个对我有帮助的良好AJAX框架。有人有主意吗?

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

解决方案

回答

由于Google Web Toolkit是Java的子集,因此当我们在后端使用Java时,其效果也最好。由于Google App Engine目前仅是Python,我想我们必须做很多事情才能使服务器和客户端之间的对话更加融洽。

在DjangoSnippets.com的AJAX标签中,jQuery似乎是最受欢迎的JavaScript库选项。

编辑:以上内容仅适用于以Python编写的Google App Engine应用程序。由于Google App Engine现在支持Java,因此GWT现在可能是编写AJAX前端的理想选择。 Google甚至有一个教程向我们展示如何做。

回答

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

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

回答

jQuery是一个很好的库,但也可以查看Prototype JavaScript框架。实际上,它使JavaScript从偶尔的笨拙语言变成了优美而优雅的语言。

回答

没有理由不应该同时使用GAE和Google Web Toolkit(GWT)。我们可以使用Python编写后端代码,并使用Java(可能还包含一些JavaScript)编写前端代码,然后将其编译为JavaScript。当使用其他AJAX框架时,服务器端和客户端语言之间也会有这种区别。

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

GWT 1.5还带有JavaScript覆盖类型,基本上,我们可以在开发客户端代码时将JSON数据视为Java对象。我们可以在此处了解更多信息。

更新:

现在,Google已添加了对Google App Engine的Java支持,我们可以根据需要在完整的Google堆栈上用Java开发后端和前端代码。 Google提供了一个不错的Eclipse插件,可以非常轻松地开发和部署使用GAE,GWT或者同时使用这两者的应用程序。

回答

如果我们希望能够调用从JavaScript到Python的方法调用,则JSON-RPC与Google App Engine一起使用会很好。有关详细信息,请参见Google的文章"使用AJAX启用客户端RPC请求"。

回答

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

回答

我们可能想看看Pajamas(http://pyjs.org/),它是" Python的GWT"。

回答

这是我们在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()

我希望这有帮助!

回答

使用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库所需的全部。

回答

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

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

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

回答

也尝试使用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)优化的成本较高,并且重构更加容易。

很好,不是吗?

回答

在我的博客中,我介绍了一种简单的方法来实现此链接:AJAX与Google App Engine。
我包括了我使用的所有JavaScript和python代码。