我正在通过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以更新现有的模型对象?
答案 0 :(得分:2)
代码中存在许多与预期变量类型相关的问题。例如,在JavaScript代码段中,localTasks
可以是JavaScript对象{}
,也可以是JSON.stringify(tasks)
中的字符串。
当这是POST到服务器时,有一个电话
update_tasks = simplejson.loads(request.POST.get("tasks", False))
如果响应中不存在False
,则有可能返回布尔值tasks
。
我认为发生的事情是:
localTasks = {}
。.ajax
来电时,它不知道如何处理tasks
条目,因为.ajax
期望键/值对,因此它甚至不均匀将tasks
的内容发送到服务器。update_tasks = simplejson.loads(request.POST.get("tasks", False))
代码尝试查找tasks
但tasks
不在request.POST
中,因此会返回False
。loads(False)
,导致您的错误。解决这些问题:
localTasks
转换为一致的类型。即确保已将其转换为字符串。request.POST.get('foo', False)
。相反,执行request.POST.get('foo', '')
并在返回空字符串时处理错误情况。