我使用以下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,如果我在控制台中一次运行这些命令,一切正常。有什么问题?
答案 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函数。