我正试图通过下面的ajax调用从Django视图调用返回JSON响应:
var tab = 'test';
var response = $.ajax({
url: "/" + tab + "/"
}).responseText;
alert(response);
这是我的Django视图:
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输出。任何帮助将不胜感激!
答案 0 :(得分:2)
您没有将dataType
参数设置为json
,并且您需要从success函数中获取json对象,请尝试以下操作:
var tab = 'test';
$.ajax({
url: "/" + tab + "/",
dataType: "json",
success: function(json){
alert(json);
}
});
答案 1 :(得分:1)
除非我弄错了,responseText
不是$.ajax()
返回的属性。我想你必须做这样的事情:
$.ajax({
url: "/test",
dataType: "json",
success: function(data) {
// use data
}
});
由于dataType
参数,产生回调的数据是普通的JS对象。如果您没有指定dataType
,您将获得包含服务器返回的原始内容的字符串。
答案 2 :(得分:1)
虽然文档声称ResponseText将阻止浏览器直到请求完成,但在我看来,你正在获得竞争条件,即在XHR请求完成之前警告变量。你必须做这样的事情:
var complete = function(data) {
console.log(response.responseText);
}
var tab = 'test';
var response = $.ajax({
url: "/" + tab + "/",
dataType: "json",
success : complete
});
答案 3 :(得分:1)
请改为尝试:
var tab = 'test';
var response = $.ajax({
url: "/" + tab + "/",
success: function(data, textStatus) { alert(data); }
});
答案 4 :(得分:0)
我遇到了同样的问题,但仅限于特定的环境。我想知道你的问题是否相同。我的环境:
在这种情况下,以下jQuery代码导致data = null,status =“success”大约一半时间。另一半时间它返回一个有效的数据对象。
$.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.");
}
});