使用Google App Engine(Python)响应AJAX GET和POST请求

时间:2015-02-19 18:13:00

标签: python ajax google-app-engine http webapp2

我对服务器(这里是app引擎)如何响应AJAX GET和POST请求感到困惑。我想向我的服务器发送一个GET请求并获取一些JSON数据。

这是AJAX GET请求

function syncRestoreLinks(e) {

    var request = new XMLHttpRequest();
    var url = "/sync"

    request.open("GET", url);
    request.setRequestHeader("Content-Type", "application/json");

    request.onreadystatechange = function() {
    if (request.readyState === 4) {
        console.log(request.responseText);
        }
    }
    request.send(null);
    console.log("Getting links from db");
}

服务器端的处理程序

class SyncHandler(Handler):
    def get(self):
        response_data = {"loggedIn":False, "linkData":None, "success":False}
        json_txt = json.dumps(response_data)
        self.response.headers['Content-Type'] = 'application/json; charset=UTF-8'
        self.response.out.write(json_txt)

    def post(self):
        response_data = {"loggedIn":False, "linkData":None, "success":False}
        json_txt = json.dumps(response_data)
        self.response.headers['Content-Type'] = 'application/json; charset=UTF-8'
        self.response.out.write(json_txt)

这个处理程序将我的响应数据写到屏幕上,我希望它将其发送回来并让JS处理它。 (我可以在这里使用服务器重定向。)

如果我改为发出POST请求,代码就会按照我的意图运行。但在这里,我无法进行服务器重定向或呈现页面,只有脚本发出请求具有该控制权。

GET / POST响应是如何工作的还是我在代码中做了一些愚蠢的事情?

有没有办法让GET响应不被写在页面上并被发送给JS?在上面的代码中,responseText是一个空字符串,但json打印在屏幕上。

2 个答案:

答案 0 :(得分:1)

我现在正在使用app引擎成功获取请求。

您的同步处理程序看起来正确。你确定它被调用了吗?在那里添加logging.info()语句以确保。如果正在调用它,那么我怀疑错误是在前端。我使用jQuery而不是XMLHttpRequest所以我无法帮助你。我的jQuery调用如下所示:

    $.get(url, callback_function, 'json');

答案 1 :(得分:0)

您可以像这样向SyncHandler添加POST处理程序:

def post(self):
    ...
    self.response.out.write(json_txt)

奇怪的是,如果没有此代码来处理请求,您的POST请求将不起作用。您只在代码中显示get()方法。