2009-08-26 59 views
4

我想通过Ajax调用像下面返回从Django视图调用一个JSON响应我jQuery.ajax响应空:为什么Django的

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输出。任何帮助,将不胜感激!

回答

1

除非我弄错了,responseText不是属性在任何$.ajax()返回。我认为你必须做这样的事情:

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

因为dataType参数,数据取得的成功的回调是正常的JS对象。如果你没有指定dataType,你会得到服务器返回的原始内容的字符串。

+0

对,这是我所期待的(字符串原始内容)... 不管怎么说,我的问题是忘记了成功:function..Whoops! – sluther 2009-08-26 21:03:34

2

你不是dataType参数设置为json,你会需要从成功的功能JSON对象,试试这个:

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

在这些情况下,以下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."); 
    } 
});