2013-06-27 2 views
2

현재 두 개의 데이터 열이 있으며 곧 4 개로 확장 될보기 페이지가 있습니다. 각 열은 특정 모델에 대한 QuerySet의 결과를 포함합니다. 이것은 내 jQuery.ajax에서 형식JSON.parse 오류가 Django에서 반환되었습니다.

[ { //JSON }, { //JSON } ] 

의 브라우저에 데이터의 2D 배열을 보낼 수 있습니다

if request.REQUEST["type"] == "text": 
     client = Client.objects.get(client_name = request.REQUEST["search"]) 
     peerList = ClientPeers.objects.prefetch_related().filter(client = client.client) 
     compList = ClientCompetitors.objects.prefetch_related().filter(client = client.client) 

else: 
    peerList = ClientPeers.objects.prefetch_related().filter(client = request.REQUEST["search"]) 
    compList = ClientCompetitors.objects.prefetch_related().filter(client = request.REQUEST["search"]) 

for peer in peerList: 
    peerlst.append({"pid" : peer.parentorg.parentorg, "pname" : peer.parentorg.parentorgname}) 

for comp in compList: 
    complst.append({"cid" : comp.parentorg.parentorg, "cname" : comp.parentorg.parentorgname}) 

lst.append(simplejson.dumps(peerlst)) 
lst.append(simplejson.dumps(complst)) 

return HttpResponse(simplejson.dumps(lst), mimetype = "text/json") 

: 여기

내가 내 views.py 방법이 무엇 성공 함수, 내가 가지고있다

function handler(results) { 
    var data = JSON.parse(results); 

    for (var i = 0; i < data[0].length; i++) 
    $("#available_peers").append("<li>" + data[0][i].pname + "</li>"); 

    for (var i = 0; i < data[1].length; i++) 
    $("#available_competitors").append("<li>" + data[1][i].cname + "</li>"); 

방화범이 끌리는 요청은 작동한다. 그리고 나는 th에서 데이터를 볼 수있다. 응답 탭. 하나의 방법 일 수 있지만 다른하지 않는 않는 이유는 무엇

var peers = JSON.parse(data[0]); 
var comps = JSON.parse(data[1]); 

var data = JSON.parse(results)를 교체 할 경우,

SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data 
var data = JSON.parse(results) 

이 오류 밖으로 콘솔 인쇄가 사라?

+0

하는 응용 프로그램/JSON 텍스트/JSON을 변경하려고 –

+0

전체'아약스()'처럼 전화를 무엇 ? –

+0

json 데이터의 모양은 무엇입니까? –

답변

1

jQuery ajax() 호출은 반환 된 데이터 형식을 지능적으로 추측합니다. 귀하의 예제에서 function handler(results), results 변수는 이미 배열의 두 항목을 포함하는 디코딩 된 JSON 개체입니다. JSON.parse(data[0])이 작동하는 이유는 JSON으로 인코딩 된 데이터를 문자열로 반환했기 때문입니다.

출력 배열에 배치하기 전에 JSON에 대한 개별 목록 요소를 인코딩하지 마십시오

lst.append(peerlst) # <-- Don't encode to JSON string here 
lst.append(complst) 

return HttpResponse(simplejson.dumps(lst), mimetype = "application/json") # <-- Single JSON encoding