2013-07-24 1 views
0

JSON 양식으로 jQuery Ajax를 통해 장고 응용 프로그램에 상당한 양의 데이터를 전달하려고합니다. 데이터를 서버에서 수신했지만 구문 분석 할 수 없습니다. update_strategysimplejson에 관여하지 않을 때 내보기에Django - jQuery POST에서 JSON 역 직렬화에 대한 TypeError

, 나는 그러나

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

을 얻을, 나는

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(); 
    } 
}); 

의 대상이 지금 인

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"})) 

을 가지고, 파일 , 시도하면

print update_strategy["id"] 

나는 TypeError: string indices must be integers 오류가 발생합니다.

들어오는 JSON을 구문 분석하여 기존 모델 개체를 업데이트하려면 어떻게해야합니까?

+0

'전략 _ 업데이트'는 무엇입니까? – karthikr

+0

오타 (typo)가 수정되었으며 기존 코드로 두 번 확인되었습니다. – Jason

답변

2

예상되는 변수 유형과 관련된 코드에는 여러 가지 문제가 있습니다. 예를 들어, JavaScript 스 니펫에서 localTasks{} JavaScript 객체이거나 JSON.stringify(tasks)의 문자열 일 수 있습니다. 이것은 서버에 게시되면

는 통화 Falsetasks 경우는 응답에 존재하지 부울 값을 반환 할 수있는 잠재력을 가지고

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

있다. , localTasks = {} 클라이언트에

  1. :

    는 내가 무슨 일이 일어나고 믿는 것은 이것이다. .ajax 호출이 발생하면

  2. , 그것은 .ajax 키/값 쌍을 기대하고 그래서 심지어 서버에 tasks의 내용을 전송하지 않기 때문에 tasks 항목을 처리하는 방법을 알고하지 않습니다.
  3. 서버의 update_tasks = simplejson.loads(request.POST.get("tasks", False)) 코드는 을 찾지 만 은 request.POST이 아니기 때문에 False이 반환됩니다.
  4. JSON 구문 분석기가 loads(False)을 시도하면 오류가 발생합니다.

는 이러한 문제를 해결하려면 :

  1. 항상 localTasks는 클라이언트에 일관된 형식으로 변환했다. ie 그것이 문자열로 변환되었는지 확인하십시오.
  2. request.POST.get('foo', False)하지 마십시오. 대신 request.POST.get('foo', '')을 수행하고 빈 문자열이 반환 될 때 오류를 처리하십시오.
관련 문제