0

これが私の機能です: 問題は、「リンク」に「値」を追加する方法がわからないことです。

   function add_subject_to_subjects_list() {
        var value = $("#id_name").val();
        var link = "/subject/create/"+value;
        show_subjects_list();
        $("#btn-create-subject").click(function() {
            $.post(link, function(data) {
                show_subjects_list();
                alert(data).hide("fast");
            });
        });
    }

そのため、私の関数は別のリンクにデータを投稿します:http://127.0.0.1:8000/subject/create/

しかし、私は自分のリンクが値に依存することを望んでおり、それは次のようになるはずです:

http://127.0.0.1:8000/subject/create/some_value/ 

それがそのページの js 全体です。

$(document).ready(function (){
    add_subject_to_subjects_list();
});

function show_subjects_list() {
    $.post("/subject/list/", function(data){
        for( var i=0; i<data.length; i++) {
            $("#list").append('<li>'+data[i]['fields']['name']+'</li><br>');
        };
    }, 'json');
}

function add_subject_to_subjects_list() {
    var value = $("#id_name").val();
    var link = "/subject/create/"+value;
    show_subjects_list();
    $("#btn-create-subject").click(function() {
        $.post(link, function(data) {
            show_subjects_list();
            alert(data).hide("fast");
        });
    });
}

それが私のサーバー側です(私はDjango/Pythonを使用しています):

@csrf_exempt
def subjects_list(request):
    user = request.user
    subjects = Subjects.objects.filter(user__exact = user)
    result = serializers.serialize("json", subjects, fields=('name'))
    return HttpResponse(result)

@csrf_exempt
def new_subject(request, subject):
    subject, created= Subjects.objects.get_or_create( 
        name=subject,
        user=request.user,
        created_by=request.user)
    if created:
        message = "Subject was created"
    else:
        message = "No subject was added to the database"
    return HttpResponse(message)

それが私のhtmlです:

{% block left-menu %}

    <div class="sidebar">
        <h3>Subjects</h3>
        <p> Enter subject name to add </p>
        <br>

        <div id="create-subject">
            <form method="post" action="."> {% csrf_token %}
                {{ subject_creation_form.as_p }}
                <input type="button" value="Create Subject" id="btn-create-subject" />
            </form>
        </div>

            <div id="subjects-list">
                <a id="append">myID</a>
                <ul id="list">

                </ul>
            </div>
        </div>
{% endblock %}

それはそのhtmlのフォームです:

class SubjectCreationForm(forms.Form):
    name = forms.CharField(label="Subject Name", widget=forms.TextInput(attrs={'size':9}))

    class Meta:
        exclude = ('created_by', 'created_time', 'num_of_followers', 'vote')
    def clean_name(self):
        name = self.cleaned_data['name']
        if len(name)>1:
            return name
        else:
            raise forms.ValidationError("Subject name should be longer")
4

2 に答える 2

1

クリック ハンドラーはページの読み込み時にアタッチされ、ボタンがクリックされたときのid_name値を使用して、空の値を使用します。id_name

function add_subject_to_subjects_list() {
    show_subjects_list();
    $("#btn-create-subject").click(function() {
        $.post("/subject/create/"+$("#id_name").val(), function(data) {
            show_subjects_list();
            alert(data);//.hide("fast");
        });
    });
}

についても同じことを行いますshow_subjects_list

于 2012-08-13T05:05:17.480 に答える
0

@nnnnnn が提案したように、コードの最初の 2 行は $.post 内に次のように配置する必要がありました。

......
$("#btn-create-subject").click(function() {
        var value = $("#id_name").val();
        var link = "/subject/create/"+value;
        $.post(link, function(data) {
            alert(data);
        });
.......

みんなありがとう)

于 2012-08-13T05:13:03.907 に答える