是否有可能发送我的对象与方法(函数)从服务器到客户端
Is it possible send my object with methods (function) from server to client?
我有对象与方法(函数)在服务器上(node.js)。我想在浏览器中使用方法获取这个对象。
有可能吗?
我在GitHub上做了简单的例子
有server.js和index.html文件。运行——> node server.
++++++++ UPD(注释后)
我的对象在服务器上:
function ClassOrder(name, cost) {
this.name = name;
this.cost = cost;
this.parts = [];
this.summ = function() {
var summ = 0;
this.parts.forEach(function(part) {
summ += part.summ();
});
return summ + this.cost;
};
}
var myobject = new ClassOrder('my object', 10);
myobject.parts[0] = new ClassOrder('my first part', 20);
myobject.parts[1] = new ClassOrder('my second part', 30);
myobject.parts[1].parts[0] = new ClassOrder('my first in second part', 40);
console.log(myobject); // view myobject in console
console.log(myobject.summ()); // return 100 (10+20+30+40)
发送到客户端
res.end(JSON.stringify(myobject));
,并得到它的客户端javascript代码(在浏览器)
function getobject() {
var xhr = new XMLHttpRequest();
xhr.open('get', '/getobject', true);
xhr.onreadystatechange = function() {
if (xhr.readyState != 4) return;
var myobject = JSON.parse(this.responseText);
console.log(myobject); // all data ok
console.log(myobject.summ()); // no methods!!
};
xhr.send(null);
}
这是一个简单的例子,在实际中我使用原型(或继承在util(node.js))。我在服务器上使用此方法并将其保存在DB中。所有工作都很好。但如果我不使用它的客户端我需要复制粘贴所有的方法,为什么?
我也不知道如何添加我的例子方法到我的对象在客户端没有反汇编。
问题是:如何在服务器和客户端上使用方法获得相同的对象而不进行双重编码。
有两种方法。
第一种方法是将我的方法(function)转换为文本并保存为object。然后我们可以使用Function构造函数来运行它。
function ClassOrder(name, cost) {
this.name = name;
this.cost = cost;
this.parts = [];
this.summfunc = ''
var summ=0; '
obj.parts.forEach(function(part) { '
summ += part.summ(); '
}); '
return summ + obj.cost;';
}
ClassOrder.prototype.summ = function() {
return (new Function('obj', this.summfunc))(this);
};
,可以在浏览器中使用
var myobject = JSON.parse(this.responseText);
myobject.constructor.prototype.summ = function() {
return (new Function('obj', this.summfunc))(this);
};
链接提交到GItHub上的新分支
这种方式是不好的,因为我需要我所有的方法转换为文本。还有@Felix Kling,它使代码更难维护和遵循。
第二种方法是在服务器端和客户端使用一个包含类和方法的文件。在接收到数据后,将其"转换"到我的类。
my class in file order.js (part of file):
function Order(object) {
object.parts = object.parts || [];
var partsArr = [];
object.parts.forEach(function (value, key) {
partsArr[key] = new Order(value);
});
this.name = object.name || 'Default';
this.cost = object.cost || 0;
this.parts = partsArr;
}
Order.prototype.summ = function() {
var summ = 0;
this.parts.forEach(function(part) {
summ += part.summ();
});
return summ + this.cost;
};
要求order.js并更改调用new Object的参数:
var Order = require('./order')
var myobject = new Order({name:'my object', cost: 10});
myobject.parts[0] = new Order({name:'my first part', cost: 20});
myobject.parts[1] = new Order({name:'my second part', cost: 30});
myobject.parts[1].parts[0] = new Order({name:'my first in second part', cost: 40});
,最后在客户端使用这个文件:
<script src='order.js'></script>
...
var xhrobj = JSON.parse(this.responseText);
var myobject = new Order(xhrobj);
链接提交到GItHub上的其他分支
我认为这种方法比第一种方法好。
我认为答案就在那里:调用从Ajax响应返回的JavaScript函数
但是似乎没有必要把答案放在脚本标签中,试试这个:
eval(this.responseText)
- 如何从服务器向客户端调用函数?(远程功能调用)
- 从javascript调用服务器端的下拉列表onchange函数
- 正在使用在服务器端或客户端执行的 Jquery 函数
- 在服务器上创建一个复选框,使用 javascript 处理函数
- 无法从服务器中的 php 调用 Ajax 函数
- 如何在 Javascript 函数中拦截 Web 服务器响应
- Node.js:如何在服务器初始化时运行一个特殊的函数
- 从服务器端调用javascript函数
- php函数向XMPP服务器发送消息,不提供日志;不起作用
- Angular:将对象存储在服务中以在视图中显示和将crud函数存储到服务器的最佳方式是什么
- 我上传了客户's服务器一个js函数不起作用
- Ajax没有给我服务器端函数调用
- 从服务器端添加jQuery函数
- "对象不是函数“;当将Node.js HTTP服务器对象传递给Socket.IO时
- 如何使用javascript代码调用服务器端函数;标记函数“>
- asp:ListBox OnSelectedIndexChanged调用javascript函数而不是服务器端代码
- OrientDB:在服务器端函数中访问查询结果数据
- 谷歌脚本 :如何在另一个函数正在运行时从服务器处理程序关闭 UI
- 将服务器端数据馈送到 JavaScript 对象构造函数中
- 将jQuery Selector传递到函数服务器端