2016-09-03 8 views
0

JSONデータをJSONP経由で返すために、GAEでPythonで書かれたアプリと対話するページを作成しました。しかし、どのような方法を使用しても、ページは常にハングアップし、データは実際には画面に表示されません。私のアドレスバーにappspotのURLを入力するだけで、それを要求するとうまくいく。GAEへのAjaxリクエストでページがハングアップ

ここは、コードの主要部分です。

(GAE上)Pythonのmain.py

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で何か不足しているのですか、それとも間違っていますか?

+0

あなたはindex.js内()はconsole.logことはできますか?あなたは400を得ていますか? – GAEfan

+0

あなたは 'success'でログインすれば正しい結果を得ていると述べました。 'function add(data)'の中にロギングを試みてください。 – GAEfan

+0

@GAEfanロギングソートは 'add'関数で動作します。それはコンソールに返されますが、私はそれを展開して、それが返すデータを見ることはできませんし、ページはまだハングアップします。しかし、これは '成功'のログインには当てはまりません。私がそれをすれば、うまくいくと思われる。 – yugottabesssoooruude

答えて

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) 
関連する問題