我创建了一个与GAE上用Python编写的应用程序交互的页面,以返回JSON数据(通过JSONP,因为跨源的东西)。但是,无论我使用什么方法,页面总是挂起,数据永远不会实际进入屏幕。如果我通过在我的地址栏中键入appspot URL来请求这些内容,它运行得很好。
这是le代码的主要部分。
Python main.py(在GAE上)
def retrieve_data(self):
# Retrieve data from some API, manipulate and return result.
# Note: I'm not using this handler for the request.
# It's just there in case I need it.
class MainHandler(webapp2.RequestHandler):
def get(self):
data = retrieve_data(self)
self.response.headers["Content-Type"] = "application/json"
self.response.out.write(
json.dumps(data)
)
# I'm using this handler for the JSONP request.
class JSONPHandler(webapp2.RequestHandler):
def get(self):
data = retrieve_data(self)
self.response.headers["Content-Type"] = "application/json"
self.response.out.write(
"%s(%s)" %
(urllib2.unquote(self.request.get("callback")),
json.dumps(data))
)
app = webapp2.WSGIApplication([
('/', MainHandler),
('/jsonp', JSONPHandler)
], debug=True)
index.js(未在GAE上托管)
function add(data) {
// Sort data, add to DOM.
}
$.ajax({
type: "GET",
dataType: "jsonp",
url: "(APPSPOT URL)/jsonp",
success: function(data) { add(data) }
});
我还尝试了$ .get,创建了一个脚本标记,其中src指向appspot链接,以及人们描述的其他XMLHTTPRequest方法,但似乎都没有。 如果我告诉成功只是console.log数据,它将在运行几秒后完成。
那么,代码有问题吗?我在main.py中遗漏了什么,或者我在AJAXing错了吗?
答案 0 :(得分:0)
我使用此代码在我的webapp2处理程序中接收跨源json请求POST数据:
def options(self):
self.response.headers['Access-Control-Allow-Origin'] = '*'
self.response.headers['Access-Control-Allow-Headers'] = '*'
self.response.headers['Access-Control-Allow-Methods'] = 'POST, OPTIONS'
def post(self):
self.response.headers['Access-Control-Allow-Origin'] = '*'
self.response.headers['Access-Control-Allow-Headers'] = '*'
self.response.headers['Access-Control-Allow-Methods'] = 'POST, OPTIONS'
data = self.request.body
args = json.loads(data)