Javascript+JQuery:对象属性未定义

Javascript+JQuery:对象属性未定义,javascript,jquery,web,Javascript,Jquery,Web,我正在尝试使用JQuery构建一个简单的web应用程序。我试图通过以下方式向服务器发出ajax请求: function getClients() { return $.ajax('/api/v1/clients', { headers: { Authorization: 'Token ' + getCookie("auth_token")

我正在尝试使用JQuery构建一个简单的web应用程序。我试图通过以下方式向服务器发出ajax请求:

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.responseJSON

getClients-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的动态链接,并显示了收到响应后更新的属性。