Javascript+JQuery:对象属性未定义
我正在尝试使用JQuery构建一个简单的web应用程序。我试图通过以下方式向服务器发出ajax请求:Javascript+JQuery:对象属性未定义,javascript,jquery,web,Javascript,Jquery,Web,我正在尝试使用JQuery构建一个简单的web应用程序。我试图通过以下方式向服务器发出ajax请求: function getClients() { return $.ajax('/api/v1/clients', { headers: { Authorization: 'Token ' + getCookie("auth_token")
function getClients() {
return $.ajax('/api/v1/clients',
{
headers: {
Authorization: 'Token ' + getCookie("auth_token")
}
});
}
我还做了以下工作:
$(document).ready(function() {
console.log(getClients());
});
{
"readyState": 4,
"responseText": "{\"count\":2,\"next\":null,\"previous\":null,\"results\":[{\"id\":2,\"group_set\":[1],\"first_name\":\"b\",\"last_name\":\"b\",\"username\":\"b\",\"telegram_id\":null,\"phone\":null,\"picture\":null,\"blocked\":false,\"telegram_user\":null,\"user\":2,\"source\":null},{\"id\":1,\"group_set\":[1],\"first_name\":\"a\",\"last_name\":\"a\",\"username\":\"a\",\"telegram_id\":null,\"phone\":null,\"picture\":null,\"blocked\":false,\"telegram_user\":null,\"user\":2,\"source\":null}]}",
"responseJSON": {
"count": 2,
"next": null,
"previous": null,
"results": [
{
"id": 2,
"group_set": [
1
],
"first_name": "b",
"last_name": "b",
"username": "b",
"telegram_id": null,
"phone": null,
"picture": null,
"blocked": false,
"telegram_user": null,
"user": 2,
"source": null
},
{
"id": 1,
"group_set": [
1
],
"first_name": "a",
"last_name": "a",
"username": "a",
"telegram_id": null,
"phone": null,
"picture": null,
"blocked": false,
"telegram_user": null,
"user": 2,
"source": null
}
]
},
"status": 200,
"statusText": "OK"
}
这样我才能看到我请求的结果。在控制台中,我看到以下内容:
$(document).ready(function() {
console.log(getClients());
});
{
"readyState": 4,
"responseText": "{\"count\":2,\"next\":null,\"previous\":null,\"results\":[{\"id\":2,\"group_set\":[1],\"first_name\":\"b\",\"last_name\":\"b\",\"username\":\"b\",\"telegram_id\":null,\"phone\":null,\"picture\":null,\"blocked\":false,\"telegram_user\":null,\"user\":2,\"source\":null},{\"id\":1,\"group_set\":[1],\"first_name\":\"a\",\"last_name\":\"a\",\"username\":\"a\",\"telegram_id\":null,\"phone\":null,\"picture\":null,\"blocked\":false,\"telegram_user\":null,\"user\":2,\"source\":null}]}",
"responseJSON": {
"count": 2,
"next": null,
"previous": null,
"results": [
{
"id": 2,
"group_set": [
1
],
"first_name": "b",
"last_name": "b",
"username": "b",
"telegram_id": null,
"phone": null,
"picture": null,
"blocked": false,
"telegram_user": null,
"user": 2,
"source": null
},
{
"id": 1,
"group_set": [
1
],
"first_name": "a",
"last_name": "a",
"username": "a",
"telegram_id": null,
"phone": null,
"picture": null,
"blocked": false,
"telegram_user": null,
"user": 2,
"source": null
}
]
},
"status": 200,
"statusText": "OK"
}
这个输出是通过点击Firefox中的复制对象来完成的。
但是,如果我更改GetClient,如下所示:
function getClients() {
return $.ajax('/api/v1/clients',
{
headers: {
Authorization: 'Token ' + getCookie("auth_token")
}
}).responseJSON;
}
然后在控制台中,我将获得
undefined
此外,当我试图在代码中使用对象的属性时,我会得到一个错误,即属性未定义。
这是怎么回事?我该怎么解决?
谢谢。保持GetClient功能如下所示:
函数getClients{
返回$.ajax'/api/v1/clients',
{
标题:{
授权:“令牌”+getCookieauth\u令牌
}
};
}
然后使用选择属性:
var clientData=getClients;
var jsonData=clientData[responseJSON];
var结果=jsonData[结果];
console.logresults[0][first_name];//记录第一个结果数组中的第一个\u名称值
因为JSON属性是字符串,所以需要括号表示法。否则,您可以使用,例如:clientData.responseJSONgetClients-returns-promise。您的代码:
return $.ajax(...).responseJSON
从未定义的promise对象读取responseJSON。Promise仅在解决问题时返回结果
您应该让GetClient保持原样,并更改文档中的部分,如:
$(document).ready(function() {
getClients().then(function(response) {
const respJson = JSON.parse(response);
console.log(respJson.responseJSON);
});
})
你到底有什么问题?您只是想从响应中访问JSON值吗?。。。。ajax是异步的吗?????我假设您需要使用,因此,您不能将返回的承诺用作json结果。那么,您希望clientData如何包含异步函数的结果?@Barmar您看到这个问题了吗?执行:console.loggetClients;返回所有JSON数据。我认为OP在选择属性时遇到了问题。他在控制台中看到了这一点,控制台中有一个到Promise的动态链接,并显示了收到响应后更新的属性。