0

フラスコフレームワークでValidationjQueryプラグインを使用しようとしています。これは私のコードです:

email: {
    required: true,
    email: true,
    remote: {
        url: $.getJSON($SCRIPT_ROOT + "/_check_mail"),  
         }              
},

この要求は、メールがデータベースにすでに存在するかどうかをチェックするサーバーに送信される必要があります。はいまたはいいえ:

@app.route('/_check_mail')
def check_mail():
    mail = request.args.get('email')
    check = database.check_mail(mail)
    return check

メールが存在しない場合、チェック変数は「True」であり、メールがすでに存在する場合は「このメールはすでに存在します」という文字列を保持します。

ただし、これをサーバーに送信しようとすると、次のエラーメッセージが表示されます。

  • リクエストURL:http://0.0.0.0:5000 / [object%20Object]?email = arnoutaertgeerts%40gmail.com
  • リクエスト方法:GET
  • ステータスコード:404が見つかりません

すでに他のことを試しましたが、何も機能しませんでした。何か案は?

コスタムメソッドで動作させることができると思いますが、同期AJAXリクエストを実行する必要があります...

4

4 に答える 4

2

[object Object]ルートを処理するためにハンドラーが設定されているとは思えません。;-)

問題は、$SCRIPT_ROOT実際にはある種のJavaScriptオブジェクトであるようです。渡す最終URLがgetJSON文字列(正しいエンドポイントを指す)であることを確認してください。

正しいエンドポイントに到達していることを確認したら、有効なJSONを返していることを確認する必要があります。

from flask import jsonify

# additional code

@app.route("/_check_mail")
def check_mail():
    # ... snip ...
    return jsonify(valid=check)
于 2013-03-15T22:41:18.830 に答える
1

$SCRIPT_ROOTが未定義の可能性があります。自分で明示的に定義する必要があります。

フラスコのドキュメントから

<script type=text/javascript>
  $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
</script>

編集 :

あなたのコードは神秘的です。$ .getJSONは、$。ajaxがGETリクエストのみを実行し、jsonレスポンスを受信するためのショートカットです。$ .getJSONは、文字列ではなくjavascriptオブジェクトを返します。実際にどのようにリクエストを送信しますcheck_mailか?

サンプルコードは次のようになります。

$.ajax({
  type : 'GET',
  data : { email : /* argument to be supplied into `mail` var of flask's `check_email` view */ },
  url : $SCRIPT_ROOT + '/_check_email',
})
于 2013-03-16T06:33:13.433 に答える
1

私はなんとかそれを修正しました(今は実際に)

問題は.getJSONメソッドに起因していました。このメソッドは、

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

検証プラグインのリモート呼び出しによって実際にすでに使用されています!

だから私が実際にやらなければならなかったのは:

email: {
    required: true,
    email: true,
    remote: {
        url: "_check_mail",
        data: {
            email: function() {
                return $("#email").val();
                }
            }
         }
    },
于 2013-03-16T11:09:42.993 に答える
0

messagesリモート応答から読み戻そうとする代わりに、オプションを使用してください。

$(document).ready(function() {

    $('#myform').validate({
        rules: {
            email: {
                required: true,
                email: true,
                remote: $.getJSON($SCRIPT_ROOT + "/_check_mail") // make sure it just returns true or false
            }
        },
        messages:{
            email: {
                remote: "custom error message"
            }
        }           
    });

});
于 2013-03-15T21:41:53.093 に答える