0

DjangoでPOSTされたjsonオブジェクトを処理する方法を理解しようとしています。jsonオブジェクトをサーバーにPOSTしていて、Pythonディクショナリのように使用したいと思います。

これが私のjsです:

$.post(
        "/projects/vote/", 
        obj,
        function(data) {
            //alert("Data Loaded: " + data);
            alert(data["msg"]);
});

私が返すもの(djangoビューの終わり):

return HttpResponse(json.dumps(foo), mimetype="application/json")

どこ

foo = {"msg": str(postdata)}

つまり、jsonオブジェクトをサーバーにPOSTし、サーバーで取得したpythonオブジェクトの文字列にアラートを送信して、何が起こっているかを確認できるようにします。

私のオブジェクトが次の場合:

var obj = {
    'bulk': false,
    'data': {
          'chosen': '14',
          'proj1': '15',
          'proj2': '14',
          'proj3': '16',
          'more': false,


        },
    'data2': [
           {
               'a': 'apple'
           },
           {
               'b': 'banana'
           },
        ],      
  }

私はこれをお返しに受け取ります:

<QueryDict: {u'data[proj3]': [u'16'], u'data[proj2]': [u'14'], u'data[chosen]': [u'14'], u'data[proj1]': [u'15'], u'bulk': [u'false'], u'data2[0][a]': [u'apple'], u'data[more]': [u'false'], u'data2[1][b]': [u'banana']}>

jsonobjとpythondictの構造が一致しないのはなぜですか?そして、どうすれば構造を同じにすることができますか?たとえば、data2 [0] [a]の代わりに、別の辞書のキーとしてdata2を取得します

ポストデータの取得方法:

# django version 1.4
postdata = request.POST.copy()
4

4 に答える 4

2

JSON.stringify次のように使用して、json をプレーンな文字列として投稿できます。

    $.post(
            "/projects/vote/", 
            {msg: JSON.stringify(obj)},
            function(data) {
                //alert("Data Loaded: " + data);
                alert(data);
    });

したがって、サーバー側では、次'msg'から抽出する必要がありrequest.POSTます。

    def view(request):
          return HttpResponse(request.POST['msg'], mimetype="application/json")

JSON.stringify一部のブラウザーではデフォルトでサポートされていないため、json lib を使用することをお勧めします: https://github.com/douglascrockford/JSON-js

于 2012-12-02T14:22:22.380 に答える
1

postdataPOSTからどのように取得しているかは表示されませんが、 request.bodyrequest.raw_post_data1.4より前のバージョンでは)使用する必要があります。

于 2012-12-02T11:16:45.007 に答える
0

JSONデータを投稿していません。dataTypeパラメータを次のように設定しますjson

$.post(
        "/projects/vote/", 
        obj,
        function(data) {
            //alert("Data Loaded: " + data);
            alert(data["msg"]);
        },
        'json'
);
于 2012-12-02T09:31:06.590 に答える
0

サーバーは単純に文字列を返すことができ、js は次のように記述できます。

$.post(
    "/projects/vote/", 
    obj,
    function(data) {
        data=eval('(' + data+ ')');//get the json object from string.
        //alert("Data Loaded: " + data);
        alert(data["msg"]);
});

これが役立つことを願っています。

于 2012-12-03T07:26:34.917 に答える