如何使用ajax(json)的谷歌应用引擎?

时间:2011-02-24 14:56:31

标签: google-app-engine

如何使用google app引擎和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&amp; y = 99

2 个答案:

答案 0 :(得分:8)

  1. 只要我知道self.request.body不会返回任何内容。查询字符串中没有名为“body”的参数,但我可能错了。所以,如果它返回一些东西,这个东西就是一个STRING。因此simplejson.dumps()无法将其转换为有效的JSON。

    如果您需要发送到服务器的所有参数的“列表”,请使用self.request.arguments()

  2. 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)

  3. 在客户端,我建议您使用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);
                 }
       });

答案 1 :(得分:3)

您的JavaScript未向App Engine发送JSON数据(test=hey&y=99是一个urlencoded字符串)。您的App Engine页面未返回JSON数据(Hello, webapp World!将仅作为裸字符串接收。)