AJAX响应在[object Object]中,jquery - 因此无法读取它

时间:2018-01-22 18:44:00

标签: javascript jquery ajax

注意

  

我的问题已被标记为重复,因为我了解到这一点   localStorage只能保存字符串。请参考原始问题   在那种情况下。

我正在尝试阅读服务器响应。虽然这很直接,但我不确定我错在哪里。经过一整天的工作后,我厌倦了调试。

这是我对REST API的回应:

{
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyLCJ1c2VybmFtZSI6Im9rdXNlciIsImV4cCI6MTUxNjYxNDk2MywiZW1haWwiOiJkYWh1QGdhaWwuY29tIiwib3JpZ19pYXQiOjE1MTY2MTEzNjN9.BIno_cz8dQsb63bgobNtSQxpxbzlTfsnvtMr8H3EGVs",
    "user": {
        "pk": 2,
        "username": "okuser",
        "email": "dahu@gail.com",
        "first_name": "",
        "last_name": ""
    }
}

我可以保存密钥"令牌"并使用它,但我无法使用此代码获取user.pk:

  success: function(data) {

          //save JWT token
          localStorage.token = data.token;
          localStorage.user = data.user; 

用户正在检索这样的其他功能,我实际上面对 user.pk为未定义

var user = localStorage.user;
  console.log("user pk : " + user.pk);
  if(!user)
  {
    somethingWentWrongHandler();
    return;
  }

在上面的代码" user"作为[object Object]存在但user.pk未定义。

2 个答案:

答案 0 :(得分:5)

Localstorage包含字符串,而不是对象,因此当您执行localStorage.user = data.user时,它就像localStorage.user = data.user.toString();

因此,您需要对其进行字符串化并在阅读时对其进行解析。

localStorage.user = JSON.stringify(data.user);  // store it
var user = JSON.parse(localStorage.user)  // read it

答案 1 :(得分:0)

您只能在本地存储中存储字符串类型。因此,当您尝试保存user对象时,它会将其转换为[object Object]字符串。