在javascript中访问用户会话数据的麻烦

Trouble to access user session data in javascript

本文关键字:数据 麻烦 会话 用户 javascript 访问      更新时间:2023-09-26

我从PHP获得会话数据来表示并读取它。但现在我遇到了麻烦,我不能读取JSON字符串数据。我已经尝试了JSON.parse()JSON.stringify,但仍然没有成功,所以请提供我解决方案。

以下是JSON字符串

 action: 'write',
  id: 'iurrv1rv8qjrb7sdb69io2mqi0',
  data: 'lang|O:4:"I18n":11:{s:19:"'u0000CActiveRecord'u0000_new";b:0;s:26:"'u0000CActiveRecord'u0000_attributes";a:9:{s:2:"id";s:1:"9";s:9:"i18n_flag";s:44:"ac84a0fd7788953be215d0c39e0f6475c5e02708.png";s:9:"i18n_name";s:5:"en_gb";s:9:"i18n_code";s:5:"en-gb";s:14:"i18n_full_name";s:10:"English-UK";s:10:"is_default";s:1:"1";s:9:"is_active";s:1:"1";s:10:"created_at";s:19:"2015-05-18 17:29:30";s:10:"updated_at";s:19:"2015-06-29 11:52:18";}s:23:"'u0000CActiveRecord'u0000_related";a:0:{}s:17:"'u0000CActiveRecord'u0000_c";N;s:18:"'u0000CActiveRecord'u0000_pk";s:1:"9";s:21:"'u0000CActiveRecord'u0000_alias";s:1:"t";s:15:"'u0000CModel'u0000_errors";a:0:{}s:19:"'u0000CModel'u0000_validators";N;s:17:"'u0000CModel'u0000_scenario";s:6:"update";s:14:"'u0000CComponent'u0000_e";N;s:14:"'u0000CComponent'u0000_m";N;}currency|O:8:"Currency":11:{s:19:"'u0000CActiveRecord'u0000_new";b:0;s:26:"'u0000CActiveRecord'u0000_attributes";a:8:{s:2:"id";s:1:"3";s:13:"currency_name";s:4:"Euro";s:13:"currency_code";s:3:"EUR";s:14:"currency_signs";s:3:"€";s:10:"is_default";s:1:"0";s:9:"is_active";s:1:"1";s:10:"created_at";s:19:"2015-05-06 14:16:01";s:10:"updated_at";s:19:"2015-05-06 14:16:54";}s:23:"'u0000CActiveRecord'u0000_related";a:0:{}s:17:"'u0000CActiveRecord'u0000_c";N;s:18:"'u0000CActiveRecord'u0000_pk";s:1:"3";s:21:"'u0000CActiveRecord'u0000_alias";s:1:"t";s:15:"'u0000CModel'u0000_errors";a:0:{}s:19:"'u0000CModel'u0000_validators";N;s:17:"'u0000CModel'u0000_scenario";s:6:"update";s:14:"'u0000CComponent'u0000_e";N;s:14:"'u0000CComponent'u0000_m";N;}user_id|i:52;user_type|i:3;user_email|s:21:"laxman@mailinator.com";username|s:3:"lax";iplocation|a:11:{s:10:"statusCode";s:2:"OK";s:13:"statusMessage";s:0:"";s:9:"ipAddress";s:14:"103.240.34.199";s:11:"countryCode";s:2:"IN";s:11:"countryName";s:5:"India";s:10:"regionName";s:7:"Gujarat";s:8:"cityName";s:9:"Ahmedabad";s:7:"zipCode";s:6:"380028";s:8:"latitude";s:7:"23.0333";s:9:"longitude";s:7:"72.6167";s:8:"timeZone";s:6:"+05:30";}',
  time: '1444389652',
  dataJSON: '{"lang":{},"currency":{},"user_id":52,"user_type":3,"user_email":"laxman@mailinator.com","username":"lax","iplocation":{"statusCode":"OK","statusMessage":"","ipAddress":"103.240.34.199","countryCode":"IN","countryName":"India","regionName":"Gujarat","cityName":"Ahmedabad","zipCode":"380028","latitude":"23.0333","longitude":"72.6167","timeZone":"+05:30"}}' }

我能够读取JSON数据,但我不能得到user_id, user_type等值。我发现数据类型使用typeof为dataJSON它返回字符串。

console.log(parseUrl.dataJSON)给出如下输出。

{
    "lang": {},
    "currency": {},
    "user_id": 52,
    "user_type": 3,
    "user_email": "laxman@mailinator.com",
    "username": "lax",
    "iplocation": {
        "statusCode": "OK",
        "statusMessage": "",
        "ipAddress": "103.240.34.199",
        "countryCode": "IN",
        "countryName": "India",
        "regionName": "Gujarat",
        "cityName": "Ahmedabad",
        "zipCode": "380028",
        "latitude": "23.0333",
        "longitude": "72.6167",
        "timeZone": "+05:30"
    }
}

所以现在麻烦出现了。如何从这个JSON获取user_id ?

这应该会很好:

var userId = JSON.parse(someObj.dataJSON || {}).user_id;

注意,这里的someObj是您在action, id, data等中的变量。

在服务器的响应中,您接收到一个字符串化的JSON对象,因此我们解析它,以接收一个真实的对象,而不是字符串。然后直接访问所需的属性

我已经找到了这个问题的答案。下面是parseUrl响应数组的最终输出,我想从dataJSON中提取数据。

parseUrl回应:

{
    action: 'write',
    id: 'biroh26adl9mc954nrrlf6bqm0',
    data: 'lang|O: 4: "I18n": 11: {
        s: 19: "'u0000CActiveRecord'u0000_new";b: 0;s: 26: "'u0000CActiveRecord'u0000_attributes";a: 9: {
            s: 2: "id";s: 1: "9";s: 9: "i18n_flag";s: 44: "ac84a0fd7788953be215d0c39e0f6475c5e02708.png";s: 9: "i18n_name";s: 5: "en_gb";s: 9: "i18n_code";s: 5: "en-gb";s: 14: "i18n_full_name";s: 10: "English-UK";s: 10: "is_default";s: 1: "1";s: 9: "is_active";s: 1: "1";s: 10: "created_at";s: 19: "2015-05-18 17:29:30";s: 10: "updated_at";s: 19: "2015-06-29 11:52:18";
        }s: 23: "'u0000CActiveRecord'u0000_related";a: 0: {
        }s: 17: "'u0000CActiveRecord'u0000_c";N;s: 18: "'u0000CActiveRecord'u0000_pk";s: 1: "9";s: 21: "'u0000CActiveRecord'u0000_alias";s: 1: "t";s: 15: "'u0000CModel'u0000_errors";a: 0: {
        }s: 19: "'u0000CModel'u0000_validators";N;s: 17: "'u0000CModel'u0000_scenario";s: 6: "update";s: 14: "'u0000CComponent'u0000_e";N;s: 14: "'u0000CComponent'u0000_m";N;
    }currency|O: 8: "Currency": 11: {
        s: 19: "'u0000CActiveRecord'u0000_new";b: 0;s: 26: "'u0000CActiveRecord'u0000_attributes";a: 8: {
            s: 2: "id";s: 1: "3";s: 13: "currency_name";s: 4: "Euro";s: 13: "currency_code";s: 3: "EUR";s: 14: "currency_signs";s: 3: "€";s: 10: "is_default";s: 1: "0";s: 9: "is_active";s: 1: "1";s: 10: "created_at";s: 19: "2015-05-06 14:16:01";s: 10: "updated_at";s: 19: "2015-05-06 14:16:54";
        }s: 23: "'u0000CActiveRecord'u0000_related";a: 0: {
        }s: 17: "'u0000CActiveRecord'u0000_c";N;s: 18: "'u0000CActiveRecord'u0000_pk";s: 1: "3";s: 21: "'u0000CActiveRecord'u0000_alias";s: 1: "t";s: 15: "'u0000CModel'u0000_errors";a: 0: {
        }s: 19: "'u0000CModel'u0000_validators";N;s: 17: "'u0000CModel'u0000_scenario";s: 6: "update";s: 14: "'u0000CComponent'u0000_e";N;s: 14: "'u0000CComponent'u0000_m";N;
    }user_id|i: 52;user_type|i: 3;user_email|s: 21: "laxman@mailinator.com";username|s: 3: "lax";iplocation|a: 11: {
        s: 10: "statusCode";s: 2: "OK";s: 13: "statusMessage";s: 0: "";s: 9: "ipAddress";s: 14: "103.240.34.199";s: 11: "countryCode";s: 2: "IN";s: 11: "countryName";s: 5: "India";s: 10: "regionName";s: 7: "Gujarat";s: 8: "cityName";s: 9: "Ahmedabad";s: 7: "zipCode";s: 6: "380028";s: 8: "latitude";s: 7: "23.0333";s: 9: "longitude";s: 7: "72.6167";s: 8: "timeZone";s: 6: "+05:30";
    }',
    time: '1444451442',
    dataJSON: '{
        "lang": {
        },
        "currency": {
        },
        "user_id": 52,
        "user_type": 3,
        "user_email": "laxman@mailinator.com",
        "username": "lax",
        "iplocation": {
            "statusCode": "OK",
            "statusMessage": "",
            "ipAddress": "103.240.34.199",
            "countryCode": "IN",
            "countryName": "India",
            "regionName": "Gujarat",
            "cityName": "Ahmedabad",
            "zipCode": "380028",
            "latitude": "23.0333",
            "longitude": "72.6167",
            "timeZone": "+05:30"
        }
    }'
}

解决代码:

var parseUrl = url.parse(req.url, true).query;
res.writeHead(200, {'Content-type': "text/plain"});
res.end(sessionHandler.run(parseUrl));
if ("string" === typeof (parseUrl.dataJSON)) {
    var _objUser = JSON.parse(parseUrl.dataJSON);        
    console.log(_objUser.user_id) // Response : 52
}