Как использовать движок Google для работы с ajax (json)?
Как использовать движок Google с помощью ajax (json)?
Теперь у меня есть это, но я получил эту ошибку:
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import simplejson as json
class AjaxHandler(webapp.RequestHandler):
def post(self):
args = json.loads(self.request.body)
self.response.headers['Content-Type'] = 'application/json'
self.response.out.write('Hello, webapp World!')
application = webapp.WSGIApplication(
[('/AJAX', AjaxHandler)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
и javascript + jquery:
var Server = function() {
};
Server.prototype = {
init: function(ajaxTargetUrl) {
this.ajaxTargetUrl = ajaxTargetUrl;
},
request: function(service, data) {
$.ajax({
url: this.ajaxTargetUrl,
context: document.body,
success: function(data) {
$('body').append('<p>'+data+'</p>');
},
error: function(){
$('body').append('<p>error</p>');
},
data: data,
type: 'POST',
dataType: 'json'
});
}
};
var APP = ( function() {
var server = new Server();
server.init('http://localhost:9999/AJAX');
server.request('questions.all', {test:'hey', y:99});
}());
my self.request.body = str: test = hey & y = 99
Ответы
Ответ 1
-
пока я знаю, self.request.body
ничего не вернет. В вашей строке запроса нет аргумента с именем "тело", но я могу ошибаться. Итак, если он что-то возвращает, это что-то вроде STRING. Поэтому simplejson.dumps()
не может превратить его в действительный JSON.
Если вам нужен "список" всех аргументов, отправленных на сервер, используйте self.request.arguments()
-
self.response.out.write('Hello, webapp World!')
не отправлять действительный JSON обратно клиенту. Он отправляет строку с заголовком "application/json" вместо "plain/text". Попробуйте создать словарь python. Например:
my_response = {'ajax_resp':'Hello, webapp World!'}
json = json.dumps(my_resposne)
а затем
self.response.headers.add_header('content-type', 'application/json', charset='utf-8')
self.response.out.write(json)
-
На стороне клиента я предлагаю вам использовать console.log() (инструмент отладки) для тестирования ваших ответов.
вы можете просто попробовать:
$.ajax({
type: 'GET',
url: '/AJAX', // or your absolute-path
data : name=totty&age=20,
dataType : 'json',
success : function(resp)
{
console.info("Ajax Response is there.....");
console.log(resp);
}
});
Ответ 2
Ваш JavaScript не отправляет данные JSON в App Engine (test=hey&y=99
- строка с urlencoded). На странице вашего приложения не возвращаются данные JSON (Hello, webapp World!
будет приниматься только как голая строка).