Javascript Ajax.done()没有数据
我使用以下jquery进行ajax调用:Javascript Ajax.done()没有数据,javascript,jquery,ajax,get,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);
$.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,如果我在控制台中一次运行一个命令,一切正常。有什么问题吗?当您在
jQuery.ajax
调用中设置数据类型时,它将作为解析对象返回。因此,.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
}
})
您正在响应中查找responseText
,它不会在那里。您将在jqXHR
对象本身上找到它(这是传递给done()
函数的第三个参数,也是整个$.ajax()调用返回的参数)
因为您有数据类型:“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
}
})
这是因为done函数的第一个参数不是XHR对象,而是responseText的内容,它已经是一个对象了。jQuery为您处理所有这些,因此无需进行任何手动转换
不管怎样,只要ajax调用成功,就会调用done函数,因此无需重新检查,当返回200以外的响应时,就会调用fail函数。什么是console.log(请求)
say?request
没有responseText
属性,除非您在服务器端给它一个属性。@KevinB我知道…:)我让OP把它打印出来。。。。所以他会意识到他得到的是他所期望的作为responseText
但作为解析对象的东西。这告诉jQuery为您调用JSON.parse
。您的请求
参数是您的(已解析)对象if(request.success){}
。删除数据类型
不会使代码如您所示工作。首先,如果您没有给出数据类型
,jQuery将尝试根据MIME类型进行猜测。如果URL返回内容类型:application/json
头,那么jQuery将为您解析它。其次,responseText
属性位于jqXHR
对象上,它不是第一个参数。它应该是第三个参数:.done(function(data,status,jqXHR){})
。如果成功,他不会“重新检查”。他正在检查从AJAX调用中检索到的对象的success
属性。啊,好吧,就我个人而言,我更喜欢使用状态码来指示操作是否成功,而不是将其作为json对象中的bool传递。返回200如果操作成功,如果出现问题,则返回其他一些40x状态代码。通过将类似信息移动到收割台来减少有效负载大小。