Ваш метод обновления - получить
[HttpGet]
public JsonResult UpdateQIOG1(int qa){}
изменить на
[HttpPost]
public JsonResult UpdateQIOG1(int qa){}
Поскольку 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 даже имеет учебное руководство, показывающее Вам, как сделать это.
Google has recently announced the Java version of Google App Engine. This release also provides an Eclipse plugin that makes developing GAE applications with GWT easier.
See details here: http://code.google.com/appengine/docs/java/overview.html
Of course, it would require you to rewrite your application in Java instead of python, but as someone who's worked with GWT, let me tell you, the advantages of using a modern IDE on your AJAX codebase are totally worth it.
Я в настоящее время использую JQuery для своего приложения GAE, и это работает красиво на меня. У меня есть диаграмма (диаграммы Google), который является динамичным и использует вызов Ajax для захвата строки JSON. Это действительно, кажется, хорошо работает для меня.
A nice way is to use an AJAX library is to take advantage of Google's AJAX Libraries API service. This is a bit faster and cleaner than downloading the JS and putting it in your /static/
folder and doesn't eat into your disk quota.
In your javascript you would just put, for example:
google.load("jquery", "1.3.2");
and/or
google.load(google.load("dojo", "1.3.0");
Somewhere in your header you would put something like:
<script src="http://www.google.com/jsapi?key=your-key-here"></script>
And that's all you need to use Google's API libraries.
Нет никакой причины, почему Вы не должны использовать GAE и Google Web Toolkit (GWT) вместе. Вы пишете свой код бэкенда в Python и код frontend в Java (и возможно некоторый JavaScript), который затем компилируется в JavaScript. При использовании другой платформы Ajax у Вас также будет это различие между серверным и клиентским языком.
GWT имеет функции, которые делают удаленный вызов кода Java сервера легче, но они являются совершенно дополнительными. Можно просто использовать JSON или интерфейсы XML, точно так же, как с другими платформами Ajax.
GWT 1.5 также идет с Типами Наложения JavaScript, которые в основном позволяют, Вы для обработки части данных JSON как Java возражаете при разработке клиентского кода. Можно читать больше об этом здесь .
Обновление:
Теперь, когда Google добавил поддержку Java Google App Engine, можно разработать и бэкенд и код frontend в Java на полном стеке Google - если Вам нравится. Существует хорошее плагин Eclipse от Google, который делает очень легким разработать и развернуть приложения, которые используют GAE, GWT или обоих.
Я рекомендовал бы изучить чистую платформу JavaScript (вероятно, JQuery) для Вашего клиентского кода и записал бы сервисы JSON в Python - который, кажется, самое легкое / самый лучший способ пойти.
Google Web Toolkit позволяет Вам записать UI в Java и скомпилировать его в JavaScript. Как Dave говорит, это может быть лучший выбор, где бэкенд находится в Java, поскольку это имеет хорошие рычаги RPC для того случая.
Можно хотеть взглянуть на Пижаму ( http://pyjs.org/ ), который является "GWT для Python".
Вот то, как мы реализовали Ajax на Google App Engine, но идея может быть обобщена на другие платформы.
у Нас есть сценарий обработчика для запросов 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()
я надеюсь, что это помогает!
jQuery является прекрасной библиотекой, но также и проверьте Прототип платформа JavaScript . Это действительно поворачивает JavaScript из того, чтобы быть иногда неловким языком на красивый и изящный язык.
Если Вы хотите смочь вызвать вызовы метода от JavaScript до Python, JSON-RPC работы хорошо с Google App Engine. См. статью Google, " Используя Ajax, чтобы Включить Клиенту Запросы RPC ", для деталей.
попробуйте также 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) и более простому рефакторингу.
Красиво, не правда ли?