Ajax .done()没有数据

时间:2013-12-03 18:44:58

标签: javascript jquery ajax get

我使用以下jquery进行ajax调用:

$.ajax({
    url: "/projects/project/xGetProjectStatus",
    type: "GET",
    dataType: "json"})
    .done( function(request){
            alert(request.responseText);
            var data = JSON.parse(request.responseText);
            if(data.success){
                   //stuff here
            }
})

警告弹出窗口始终显示responseText未定义。我正在“获取”的页面是格式良好的JSON,如果我在控制台中一次运行这些命令,一切正常。有什么问题?

3 个答案:

答案 0 :(得分:3)

你在回复中寻找responseText,它不会在那里。您可以在jqXHR对象本身找到它(这是传递给done()函数的第三个参数,也是整个$.ajax()调用返回的。

因为你有dataType: "json",所以响应已经是一个JSON解析对象了。

改变这个:

.done( function(request){
     alert(request.responseText);
     var data = JSON.parse(request.responseText);
     if(data.success){
          //stuff here
     }
 })

就这样:

.done( function(data){
    if(data.success){
          //stuff here
     }
 })

答案 1 :(得分:0)

dataType调用中设置jQuery.ajax时,它将作为已解析的对象返回。因此,request中的.done对象实际上是您解析的json字符串

如果您不希望jQuery自动解析您的JSON,您可以从通话中删除数据类型。

$.ajax({
    url: "/projects/project/xGetProjectStatus",
    type: "GET"
}).done( function(request){
     alert(request.responseText);
     var data = JSON.parse(request.responseText);
     if(data.success){
         //stuff here
     }
})

答案 2 :(得分:0)

这是因为done函数的第一个参数不是XHR对象,而是responseText的内容已经作为对象。 jQuery为您处理所有这些,因此无需进行任何手动转换。

无论何时ajax调用成功,都会调用done函数,因此无需重新检查它,并且当返回200以外的响应时调用fail函数。