Как использовать Google App Engine с AJAX (JSON)? - PullRequest
7 голосов
/ 24 февраля 2011

Как использовать Google App Engine с 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

Ответы [ 2 ]

8 голосов
/ 24 февраля 2011
  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!'}<br /> json = json.dumps(my_resposne)

    , а затем

    self.response.headers.add_header('content-type', 'application/json', charset='utf-8')<br/> 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); } });

3 голосов
/ 24 февраля 2011

Ваш JavaScript не отправляет данные JSON в App Engine (test=hey&y=99 - это строка в формате urlencoded). Ваша страница App Engine не возвращает данные в формате JSON (Hello, webapp World! будет получено только как пустая строка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...