0

ajaxを使用してdjangoにテキストを投稿し、入力データを保存し、同じページにデータを表示し、Twitterのように更新しません。

私のjs:

$('#SumbitButton').click(function(){
        var data_1 = $('#data_1').val()
        var data_2 = $('#data_2').val()
        var data_3 = $('#data_3').val()
        var data_4 = $('#data_4').val()
        var user = $('#AuthorName').text()
        var authorprotrait = $('#UserProprait').html()
    if(data_1.length>0){
        $.ajax({
            type: 'POST',
            url: '/post/',
            data:{'data_1':data_1,'data_2':data_2,'data_3':data_3,'data_4':data_4}, 
            async: false,
            error: function(msg){alert('Fail')},
            success:  function(msg){
                $('#TopicWrap').prepend("<div class='topic-all even'><div class='topic-left'><div class='topic-author'><div class='topic-author-protrait'>"+authorprotrait+"</div><div class='topic-author-nickname'>"+authorname+"</div></div></div><div class='topic-right'><div class='topic-meta'><span class='topic-datetime'></span></div><div class='topic-content-wrap'><div class='topic-content'>"+msg+"</div></div></div><div class='clearfix'></div></div>");
                $('#data_1').val('');   
                $('#data_2').val('');
                $('#data_3').val('');
                $('#data_4').val('');   
            }
        });
    } else {
        alert('The data_1's length  error !'+data_1.length);  
    }   
});

そしてhtml:

<div id="TopicTextarea">
    <div>
        data1:<input tabindex="4" id="data_1"  type="text" name="data1"  value="" maxlength="6"  placeholder=""/></br>
        data2:<input tabindex="4" id="data_2"  type="text" name="data2"  value="" maxlength="8"  placeholder=""/></br>
        data3:<input tabindex="4" id="data_3"  type="text" name="data3"  value="" maxlength="10"  placeholder=""/></br>
        data4:<input tabindex="4" id="data_4"  type="text" name="data4"  value="" maxlength="10"  placeholder=""/>  
        <div id="TopicFormControl">
        <button type="button" id="SumbitButton" class="button orange">sumbit</button>
        </div>
    </div>
   <div class="clearfix"></div>
</div>
<div id="TopicWrap">
{% include 'topics.html'%}
</div>

とビュー:

@login_required
def post(request):

    assert(request.method=='POST' and request.is_ajax()==True)
    data_1 = smart_unicode(request.POST['data_1'])
    data_2 = smart_unicode(request.POST['data_2'])
    data_3 = smart_unicode(request.POST['data_3'])
    data_4 = smart_unicode(request.POST['data_4'])

    data_obj = DataPool(user=request.user,data_1=data_1,data_2=data_2,data_3=data_3, data_4=data_4)
    data_obj.save()

    content = '"+data_3+"  "+data_4+" "+data_1+"("+data_2+")' 

    response = HttpResponse(cgi.escape(content))

    return response

データを入力して送信ボタンをクリックすると、データを保存できますが、データを表示できません。コードの何が問題なのですか?

ありがとう。

4

1 に答える 1

1

まず、Posterなどを使用して、ビューが期待どおりに返されることをテストします。その後、AJAX 部分の構築を開始する必要があります。

何が悪いのか...実際に何をしているのかを言うのではなく、「データを表示できない」と書いているだけなので、言うのは少し難しいです。あなたの見解では、次の行に関係していると思われます。

content = '"+data_3+"  "+data_4+" "+data_1+"("+data_2+")' 

これが何をすると思うかははっきりしていませんが、実際には次のようになります。

>>> '"+data_3+"  "+data_4+" "+data_1+"("+data_2+")'
'"+data_3+" \xe3\x80\x80"+data_4+"\xe3\x80\x80"+data_1+"("+data_2+")'

つまり、部分文字列"data_3"(など)を含む文字列を生成します。送信されたデータは含まれません。

于 2012-05-13T07:05:14.700 に答える