页面挂起对GAE的Ajax请求

时间:2016-09-03 12:21:17

标签: javascript jquery python ajax google-app-engine

我创建了一个与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错了吗?

1 个答案:

答案 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)