使用Google App Engine(Python)响应AJAX GET和POST请求
我对服务器(这里是appengine)如何响应ajaxget和POST请求感到困惑。我想向我的服务器发送一个GET请求,并获取一些JSON数据 下面是AJAX GET请求使用Google App Engine(Python)响应AJAX GET和POST请求,python,ajax,google-app-engine,http,webapp2,Python,Ajax,Google App Engine,Http,Webapp2,我对服务器(这里是appengine)如何响应ajaxget和POST请求感到困惑。我想向我的服务器发送一个GET请求,并获取一些JSON数据 下面是AJAX GET请求 function syncRestoreLinks(e) { var request = new XMLHttpRequest(); var url = "/sync" request.open("GET", url); request.setRequestHeader("Content-T
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会打印在屏幕上。您可以向
SyncHandler
添加一个POST处理程序,如下所示:
def post(self):
...
self.response.out.write(json_txt)
$.get(url, callback_function, 'json');
奇怪的是,如果没有此代码来处理请求,POST请求不应该工作。您的代码中只显示了一个
get()
方法。我现在正在使用app engine成功地执行AJAX get请求
您的同步处理程序看起来正确。你确定有人叫它吗?在那里添加一个logging.info()
语句以确保。如果正在调用它,那么我怀疑错误在前端。我使用jQuery而不是XMLHttpRequest
,所以我不能帮你。我的jQuery调用如下所示:
def post(self):
...
self.response.out.write(json_txt)
$.get(url, callback_function, 'json');
您是否使用webapp2将url
/sync
链接到SyncHandler
?是的,webapp2和python2.7我认为我的问题措辞不准确。我没有在代码中显示post方法,但正如您所说,它与get相同。我想知道的是为什么这些请求会以这种方式工作。一个关于AJAX请求的更一般的问题。哦,现在我明白你的问题了。如果您发送一个307状态代码,那么就可以在POST请求上指定重定向,如下所述:AJAX响应应该是JSON对象,而不是呈现的页面。我可以理解POST的工作原理。有没有办法让GET响应不写在页面上并发送给JS。在上面的代码中,responseText是一个空字符串,但是json打印在屏幕上。这是一个不同的问题。最初的问题是“使用Google App Engine(Python)响应AJAX GET和POST请求”,而不是处理AJAX响应。请提出一个新问题(或先搜索)。您的response.out.write调用是将json数据发送回JS函数还是将其打印到屏幕上?它将json数据发送回。