0

以下の関数を使用して、フォームデータを ajax で送信しました。

$(function() {
        $('#sendButton').click(function(e) {
            e.preventDefault();
            var temp = $("#backupSubmit").serialize();
            $.ajax({
                type: "POST",
                data: temp,
                url: 'backup/',
                success: function(data) {
                     $("#response").html('<p>{% trans "you can download it from here:" %}'+'<a href="'+data+'">{% trans "download" %}</a></p>');
                        $("#response").show();
                }
            });
        });
    });

今、私はこの機能を使いたいです:

$("#sendButton").click(function(e){
        e.preventDefault();
        save_data();
        if(save_data()) {
            alert('Saved!');
        } else {
            alert('Failed!');
        }
    });
function save_data() {
        $.post("backup/", {
                    csrfmiddlewaretoken: $("input[name='id_csrfmiddlewaretoken").val(),
                    ???? backup_from: $("#backupSubmit").serialize()
                },
                function(data) {
                     data = json_parse(data);
                    if(data.status=="success") {
                        return true;
                    } else {
                        console.log("status: "+data.status)
                        console.log("error: "+data.error)
                        console.log("POST DATA: "+data.data)
                        $.each(data.data, function(i, n){
                            console.log(">"+i+": "+n);
                        });
                        return false;
                    }
                },
                "json"
        );
    }

しかし、見ると、フォームが有効ではないようです! これが私のフォームです:

BACKUP_CHOICES = (('systemSettings',_("systemSettings")),
                  ('ruleSet',_("ruleSet")))

class backupForm(forms.Form):
    backup_from = forms.MultipleChoiceField(widget=CheckboxSelectMultiple, label=_("backup from"), required=True,
        choices=BACKUP_CHOICES, error_messages={'required': _("Please choose at least one option")})

郵便でデータを送信しますが、要件を除いて検証チェックはありません。フォームが無効な理由がわかりません。上記のようなフォームデータ(????の隣)を送信するのは正しいですか?ご協力いただきありがとうございます:

4

1 に答える 1

1
  1. data = で投稿リクエストを送信するだけで$("#theForm").serialize()、csrftoken などを含める必要があります ...
  2. firebug または webkit インスペクター (F12 キーを押す) を使用して、Web サイトからの投稿要求を監視します。
  3. サーバーがエラーで応答する場合は、実際にはインスペクターを使用して応答のトレースバックを読み取ります。
  4. サーバーがエラーで応答しない場合は、インスペクタでも応答を読んでください。

フォームが無効のようです

「ここで立ち止まるわけにはいかない、ここはバットランドだ」有効ですか?有効でない場合、ビューは適切に応答する必要があり、JavaScript はその応答を使用して、フォームが無効であることをユーザーに通知できる必要があります。

Python コードをトレースする必要がある場合は、import pdb; pdb.set_trace()適切にデバッグし、有効かどうか、また何を行っているかを確認できるように、ビューに入れます。

また、ビューコードを投稿していません。とにかく、ポイント1.はうまくいくはずだと思います。

于 2012-11-21T08:17:55.390 に答える