0

jQuery Ajax を介してかなりの量のデータを JSON の形式で Django アプリにプッシュしています。データはサーバーによって受信されますが、解析できません。

ビューファイルには、

from django.http import HttpResponse
from django.utils import simplejson

def saveStrategy(request):
  if not request.user.is_authenticated:
    return HttpResponse(simplejson.dumps({"response" : "failure"}))
  else:

    #This section here throws a TypeError - Expected String or Buffer
    #update_tasks = simplejson.loads(request.POST.get("tasks", False))
    #update_strategy = simplejson.loads(request.POST.get("strategy", False))

    update_strategy = request.POST.get("strategy", False)
    update_tasks = request.POST.get("tasks", False)

    print update_strategy

    return HttpResponse(simplejson.dumps({"response" : "success"}))

の目的地です

if (typeof currentTaskId !== "undefined") {
    $("#save_strategy_task").trigger("click");
    localTasks = JSON.stringify(tasks)
}
else
    localTasks = {};

.ajax({
    url : "saveStrategy/",
    type : "POST",
    data : {"strategy" : JSON.stringify(strategy), "tasks" : localTasks},
    dataType : "json",
    success : function(data) {
        if (data.response == "success")
            strategyDetailCloseHandler();
    }
});

今、が にupdate_strategy関与していないときsimplejson、私は

{
 "title":"Title",
 "status":"pending",
 "strategy":"Strategy",
 "dueDate":"",
 "owner":"",
 "metrics":"test",
 "id":"3",
 "outcome":"Outcome1"
}

しかし、試してみると

print update_strategy["id"]

TypeError: string indices must be integersエラーが発生します。

受信した JSON を解析して既存のモデル オブジェクトを更新するにはどうすればよいですか?

4

1 に答える 1

2

予想される変数の型に関連するコードには、多くの問題があります。たとえば、JavaScript スニペットでlocalTasksは、 は JavaScript オブジェクト{}であるか、 からの文字列である可能性がありますJSON.stringify(tasks)

これがサーバーに POST されると、呼び出しがあります。

update_tasks = simplejson.loads(request.POST.get("tasks", False))

応答に存在しないFalse場合、ブール値を返す可能性があります。tasks

私が信じていることはこれです:

  1. クライアント上で、localTasks = {}.
  2. 呼び出しが発生すると、キーと値のペアが必要なため、エントリ.ajaxの処理方法がわかりません。そのため、コンテンツをサーバーに送信することさえありません。tasks.ajaxtasks
  3. サーバー上のupdate_tasks = simplejson.loads(request.POST.get("tasks", False))コードはルックアップを試みますtasksが、含まれてtasksいないrequest.POSTためFalse返されます。
  4. JSON パーサーが を実行しようとするとloads(False)、エラーが発生します。

これらの問題を修正するには:

  1. クライアントでは常にlocalTasks一貫した型に変換されています。つまり、文字列に変換されていることを確認してください。
  2. しないでくださいrequest.POST.get('foo', False)。代わりにrequest.POST.get('foo', '')、空の文字列が返されたときにエラー ケースを実行して処理します。
于 2013-07-24T03:06:13.997 に答える