我正在尝试在我的Google App Engine应用程序中实现AJAX,因此我正在寻找一个可以帮助我的优秀AJAX框架。任何人都有任何想法?
我正在考虑使用Google Web Toolkit,在为Google App Engine创建AJAX方面有多好?
答案 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)
请在此处查看详细信息:http://code.google.com/appengine/docs/java/overview.html
当然,它需要你用Java而不是python重写你的应用程序,但是作为一个使用GWT的人,让我告诉你,在你的AJAX代码库上使用现代IDE的优势是值得的。< / p>