2009-08-26 2 views
4

내가 좋아 아래 아약스 호출을 통해 장고보기 통화에서 JSON 응답을 반환하기 위해 노력하고있어 빈 내 jQuery.ajax 응답입니다 :왜 장고

: 여기

var tab = 'test'; 
var response = $.ajax({ 
    url: "/" + tab + "/" 
}).responseText; 

alert(response); 

내 장고보기입니다

if request.is_ajax() == True: 
    req = {} 
    req['html'] = '<b>This is a test</b>' 
    response = simplejson.dumps(req) 
    print response 
    return HttpResponse(response, mimetype="application/json") 
else: 
    return render_to_response("ajax/pingpong.html", {'ajax': ajax}) 

이상한 이유로 경고 상자는 비어 있습니다 (정의되지 않았음에도 불구하고). 흥미롭게도 $. post와 $ .getJSON은 똑같은 URL에서 잘 작동합니다. 내 콘솔에 예상되는 JSON 출력도 표시됩니다. 어떤 도움을 주시면 감사하겠습니다!

답변

1

속성은 $.ajax()이 반환합니다. 난 당신이 이런 식으로 뭔가를 줄 생각 때문에 dataType 매개 변수의

$.ajax({ 
    url: "/test", 
    dataType: "json", 
    success: function(data) { 
    // use data 
    } 
}); 

는, 데이터가 성공 콜백에 굴복 일반 JS 객체입니다. dataType을 지정하지 않으면 서버에서 반환하는 원시 콘텐츠가 포함 된 문자열이 표시됩니다.

+0

오른쪽, 즉 내가 어쨌든 ... (원시 내용 문자열) 를 기다리고 있었다 무엇을, 내 문제는 성공을 잊고 있었다! – sluther

2

당신은 jsondataType 매개 변수를 설정하지 않는, 당신은 성공 함수의 JSON 개체를 얻을해야합니다,이 시도 : 내가 잘못 생각하지 않는 한, responseText가 아닌

var tab = 'test'; 
$.ajax({ 
    url: "/" + tab + "/", 
    dataType: "json", 
    success: function(json){ 
     alert(json); 
    }   
}); 
1

요청이 완료 될 때까지 ResponseText가 브라우저를 차단한다고하지만 XHR 요청이 완료되기 전에 변수에 경고하는 것과 같은 경쟁 조건이 발생하는 것처럼 보입니다. 당신은 이런 식으로 뭔가를해야 할 것이다 :

var complete = function(data) { 
    console.log(response.responseText); 
} 
var tab = 'test'; 
var response = $.ajax({ 
    url: "/" + tab + "/", 
    dataType: "json", 
    success : complete 
}); 
1

대신이 시도 : 나는하지만 특정 환경에서 동일한 문제에 봉착

var tab = 'test'; 
var response = $.ajax({ 
    url: "/" + tab + "/", 
    success: function(data, textStatus) { alert(data); } 
}); 
0

합니다. 귀하의 문제가 동일한 지 궁금합니다. 내 환경 :

  1. 구글 크롬 (v4.1.249.1025)에서 내 웹 사이트를보기 장고의 내부 웹 서버 (./manage.py의 runserver 0.0.0.0:8080)
  2. 을 실행합니다.

이러한 상황에서 다음 jQuery 코드는 data = null, status = "success"를 약 절반으로 만듭니다. 나머지 절반은 데이터에 대해 유효한 Object를 반환합니다. function..Whoops을 :

$.ajax({ 
    type:"POST", 
    url:"response/"+q.id+"/", 
    cache:false, 
    dataType:"json", 
    data:{response:$(this).val()}, 
    success:function(data, status) { 
    alert(data+","+status); 
    }, 
    error:function() { 
    $(".main_container").text("Error. Please check your internet connection."); 
    } 
});