-1

だから私はこのフォームを持っています(明確にするためにいくつかの要素が削除されています)

<form id="{{ section }}-submission-form{{ cell_id }}">

    <input type=hidden name="section" value="{{ section }}" />
    <input type="hidden" name="school" id="{{ section }}-submit-school{{ cell_id }}" />


    {% if section == "posts" %}
        <input type=hidden name="url" />
        <textarea class="{{ section }}txtinput{{ cell_id }}" name="text-submission"
                  default="{% if is_advice %}What's your question?{% else %}What's on your mind?{% endif %}"
                  id="{{ section }}-suggestion-box{{ cell_id }}"
                  style="margin: 0 0 .5em 0;font-family: Arial, sans-serif;font-size: 14px; width: 410px;"
                  rows='8'></textarea>
        <br />
    {% endif %}
    {% if section == "photos" %}
        <span style='line-height: 40px;'>
        <label class="photouploadlabel">URL</label><input type="text" name="image-url" style="width: 335px" /><br>
        <label class="photouploadlabel">File</label><input type="file" name="image-file" style="width: 335px"/><br>
        <label class="photouploadlabel">Caption</label><input type="text" id="image-caption{{ cell_id }}"
                                                              name="image-caption" style="width: 335px" default="optional"/>
        </span>
    {% endif %}


    <div id="{{ section }}-bottomdiv{{ cell_id }}" style="height: 45px; margin-top: .5em; width: 413px;">
        <div style="height: 45px">
        <label id="{{ section }}-tagsbutton{{ cell_id }}"
               style="margin-right: .5em; cursor: pointer; vertical-align: bottom; float:left; line-height: 1.8em;">Tags</label>

        <input id="{{ section }}-tagsinput{{ cell_id }}" type="text" name="tags-list" style="position: relative"/>
                    <button id="send-{{ section }}-suggestion{{ cell_id }}" disabled="disabled"
                style="float:right; position: relative; bottom: 7px; right: -4px;">Post</button>
        </div>

タグリストの入力はオートコンプリートに変換され、ユーザーはタグを選択します。タグは、グローバルjs変数「選択されたタグ」に追加されます。ユーザーが「投稿」を押すと、次のコードが表示されます。

           alert(selectedtags);
       $("#"+section+"-submission-form"+cellid).ajaxSubmit({
           url: '/save-suggestion/',
           type: 'post',
           data: {'tags': selectedtags },
           dataType: 'json',
           success: function(response){
               clear_text(section, cellid);
               location.reload();
           },

ここに奇妙な点があります。どのセクションにいても、アラートは機能します。ただし、サーバー側でrequest.REQUESTを印刷すると、セクションが写真の場合は取得します

{u'image-url': u'http://i.imgur.com/vUxla.jpg', u'tags-list': u'', u'tags': u'wtf,crazy,pics', u'section': u'photos', u'school': u'1997', u'anonymity-level': u'schoolandmajor', u'image-file': u'', u'image-caption': u''}

つまり、私が欲しいもの。しかし、セクションが投稿の場合、私は

{u'text-submission': u'wtf', u'school': u'1997', u'tags-list': u'', u'url': u'', u'section': u'posts', u'tags[]': u'crazy', u'anonymity-level': u'schoolandmajor'}

つまり、tags []に名前が変更されるだけでなく(これは以前に見たことがあり、あまり心配していませんが...)、タグリストを最後のエントリだけに切り捨てます。

誰かが私が間違っている可能性があることを知っていますか?

編集:さらに詳しく調べると、これはrequest.POSTではなくrequest.REQUESTを使用して実行していることです。

それで、それでも、何が起こっているのですか?

4

2 に答える 2

4

request.REQUESTは、POST 用の と GET 用のMergedDictを含むです。QueryDictMergedDict を反復すると、各キーに対して単一の値が取得されます。これは、__str__メソッドがそのクラスに対して行うことです。QueryDict.getlist次のように使用して、これを回避できます。

print request.REQUEST.getlist('tags[]')

私のテストでは、次の結果が得られます。

[u'asd', u'123']

print request.REQUEST['tags[]']がちょうど123を取得します。

于 2012-08-09T01:24:12.780 に答える
0

問題は JavaScript にあるようです。両方のリクエストで受け取るデータは異なるようです。最初のリクエストtagsには、次の文字列があります。

u'tags': u'wtf,crazy,pics'

ただし、後者では、タグは次のように設定されます。

u'tags[]': u'crazy'

よくおっしゃる通り、名前を変えて最後の項目だけ残しています。tagsこの違いは、最初のリクエストがリストではなく、コンマで区切られた単一の文字列であるという事実に起因しているようです。

コードを変更して、その変数の処理を一貫させることで問題を解決できると思います。リストを送信すると問題が発生するという事実に基づいて、最初のリクエストのカンマ区切りの文字列を使用することをお勧めします。

リストを使用するときに正しいデータを取得していないという事実は、JSON データの受信側のパーサーが原因である可能性があります。JSON データは技術的にはオブジェクトであり、オブジェクトは同じ名前 (およびコード) を持つ 2 つのメンバーを持つことができないためです。おそらくそれらすべてを として送信していますtags[])。

于 2012-08-09T01:25:22.417 に答える