【发布时间】:2016-04-01 11:10:57
【问题描述】:
var obj = {
conn : null,
first : function(thisIdentity) {
"use strict";
var myObj = this;
$(document).on('click', thisIdentity, function(e) {
e.preventDefault();
$.ajax ({
url : some value,
// other parameters
success : function(data) {
myObj.conn = new Connection(data.user_id, "127.0.0.1:80");
sessionStorage.setItem('connection', JSON.stringify(myObj.conn));
}
});
},
second : function(thisIdentity) {
"use strict";
var myObj = this;
var conntn = sessionStorage.getItem('connection');
$(document).on('click', thisIdentity, function(e) {
e.preventDefault();
$.ajax ({
url : some value,
// other parameters
success : function(data) {
var parsedConnection = JSON.parse(conntn);
parsedConnection.sendMsg(data.id, data.nid);
}
});
}
};
var Connection = (function() {
function Connection(uid, url) {
this.uid = uid;
this.open = false;
this.socket = new WebSocket("ws://"+url);
this.setupConnectionEvents();
},
Connection.prototype = {
sendMsg : function(id, nid) {
alert("Working");
},
// other functions
}
})();
所以在第一个的 AJAX 回调函数中建立了连接,我通过 JSON 将对象存储在 sessionStorage 中,但是当我在第二个的 AJAX 回调中使用它时,就会出现错误
TypeError: parsedConnection.sendMsg 不是函数
现在我明白这可能是因为 JSON 可用于存储普通对象而不是基于原型的对象。
我的问题是:谁能告诉我如何通过 JSON 或任何其他方式来存储基于原型的对象来实现这一点?
我不想使用eval。任何代码,参考将不胜感激。谢谢!
更新
我按照@Dan Prince 所说的做了,但后来出现了一个新问题,现在在sendMsg 函数中我使用了
this.socket.send(JSON.stringify({
action: 'message',
rec: receiver,
msg: message
}));
然后就这样了
InvalidStateError:尝试使用不是的对象, 或不再可用
任何输入?谢谢!
【问题讨论】:
-
看看这个link。我希望它会帮助你。 stackoverflow.com/questions/34413260/…
-
@Rish 所以我应该创建一个
array并将object添加到其中并将array存储到sessionStorage然后在第二个函数中获取array?对吗? -
您不能希望从保存的数据中重新创建套接字实例。返回套接字的唯一方法是再次调用
new Connection();并且由于连接完全由uid和url定义,这就是您需要保存的所有数据。 -
@Roamer-1888 是的,我想通了。谢谢!
-
@Yomesh,在偏离轨道之前,我为你写了一半的答案。它可能对你仍然有用,所以我会完成它......待命......
标签: javascript jquery json ajax sessionstorage