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

How to use google app engine with ajax (json)?

如何将谷歌应用引擎与Ajax(JSON)结合使用?

现在我有了这个,但我得到了这个错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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});
}());

我的self.request.body=str:test=hey&y=99


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

    如果需要已发送给服务器的所有参数的"列表",请使用self.request.arguments()

  • self.response.out.write('Hello, webapp World!')不向客户端发送有效的JSON。它发送一个带有"application/json"头的字符串,而不是"plain/text"。尝试创建一个python字典。例如:

    埃多克斯1〔6〕

    然后

    江户十一〔七〕号

  • 在客户端,我建议您使用console.log()(调试工具)来测试您的响应。

    您可以尝试:埃多克斯1〔8〕


  • 您的javascript没有向应用程序引擎发送JSON数据(test=hey&y=99是一个urlencoded字符串)。你的应用引擎页面没有返回JSON数据(Hello, webapp World!将被作为一个裸字符串接收)。