2

jQueryの$.post()オブジェクトを使用してXHRAJAXリクエストを送信するWebページを作成しています。投稿は、別のドメインにあるFlaskアプリによって受信されています。Javascriptは以下のとおりです。

$.post('http://myurl.com/create', {
     'title': sender.title,
      'url': sender.url
});

該当するFlaskルーターコードは次のとおりです。

@app.route('/create', methods=['GET', 'POST'])
@crossdomain(origin='*')
def create():
    print(request.args.get('title'))
    if request.method == 'POST':
        title = request.form['title']
        url = request.form['url']

        new_mark = Mark(
            title=title,
            url=url
        )
        new_mark.save()

        return redirect(url_for('index'))

フォームがURLに送信された場合、Pythonは正常に機能しますが、jQueryのAJAXオブジェクトを介してPOSTした場合は機能しません。AJAXリクエストを実行しようとするたびに400エラーがスローされます。Flaskのrequest.argsオブジェクトを見ましたが、リクエストが行われたときに何も含まれていません。

何か案は?

4

2 に答える 2

0

問題は、Ajax リクエストがクロス ドメイン リクエストをターゲットにするように構成されていないことです。$.post の代わりに $.ajax を使用して柔軟性を高め、リクエスト構成で crossDomain: true を設定することをお勧めします。

$.ajax({
  type: 'POST',
  url: 'http://myurl.com/create',
  crossDomain: true,
  data: '{'title': sender.title, 'url': sender.url}',
  dataType: 'jsonp',
  success: function(responseData, textStatus, jqXHR) {
    // Success Callback
  },
  error: function (responseData, textStatus, errorThrown) {
    // Error Callback
  }
});

これが役立つことを願っています。

于 2012-12-25T20:47:28.650 に答える