为什么我的jQuery.ajax响应在Django中为空

4
我将尝试通过以下方式,从Django视图调用中返回JSON响应,并通过ajax调用进行传递:

我正在尝试通过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 输出。欢迎任何帮助!

5个回答

2
您没有设置dataType参数为json,您需要从成功函数获取json对象,请尝试以下代码:

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

2
除非我弄错了,responseText不是$.ajax()返回的属性。我认为你需要像这样做:
$.ajax({
  url: "/test",
  dataType: "json",
  success: function(data) {
    // use data
  }
});

由于 dataType 参数的存在,传递给成功回调函数的数据是一个普通的 JS 对象。如果您没有指定 dataType,则会得到服务器返回的原始内容字符串。

没错,这就是我期望的(包含原始内容的字符串)...无论如何,我的问题在于忘记了 success 函数...哎呀! - sluther

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. 运行Django内部Web服务器(./manage.py runserver 0.0.0.0:8080)
  2. 在Google Chrome(v4.1.249.1025)中查看我的网站。

在这些情况下,以下jQuery代码导致数据= null,状态=“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.");
   } 
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接