JSON 对象回复解析
JSON object reply parsing
所以当Ajax调用返回JSON回复时,我做了:
oData = JSON.parse(sReply);
哪里
var oData = new cData();
function cData() {
this.Email = "";
this.Name = "";
this.test = function () {
alert("lol");
}
}
问题是,JSON 字符串只包含电子邮件和名称变量,所以当 oData = JSON.parse(sReply( 发生时,函数测试会被覆盖,当我尝试调用函数时,它不存在。有没有办法避免这种情况?我可能有很多函数和其他我不想通过 JSON 传输的变量。
oData = JSON.parse(sReply);
- 这将创建一个 JavaScript 对象。如果 oData 以前是一个cData
对象,这并不重要......你刚刚重新分配了它。
您应该能够获取 JSON 响应并将其属性手动分配给现有的 cData
对象:
var oData = new cData();
var response = JSON.parse(sReply);
oData.Email = response.Email;
oData.Name = response.Name;
或者,您可以遍历属性:
for (var i in response)
oData[i] = response[i];
JSON 没有编码函数的规定。它仅用于数据。
当然,你可以从 JavaScript 中将这些函数序列化为字符串,并类似地重新构建它们,但这在其他语言中效果不佳。(你的 Python 代码会用 JavaScript 函数做什么?(
如果您考虑数据交换的一般问题,特别是当它涉及来自不完全受信任的提供商的服务时,通过数据编码允许功能的想法变得非常可怕。
解决此问题的常用方法是为您的对象(cData
(提供一个静态工厂方法,该方法将接受 DTO(数据传输对象(并返回一个新的cData
实例,即:
function cData() {
this.Email = "";
this.Name = "";
this.test = function () {
alert("lol");
}
}
// Static factory which produces a new `cData` object from the supplied
// Data Transfer Object. Note this function belongs to the Constructor
// function rather than instances created when it's used.
cData.fromDTO(value) {
// Create a new cData instance.
var result = new cData();
// Copy the properties from the DTO.
result.Email = value.Email;
result.Name = value.Name;
// Return the populated instance.
return result;
}
然后,您可以使用静态工厂来处理 AJAX 调用的结果,即:
function onAjaxResponse(response) {
var myData = cData.fromDTO(JSON.parse(response));
// Invoke the 'test' method.
myData.test();
}
这也在数据传输层(来自服务器的数据(和业务逻辑(JavaScript应用程序(之间提供了明确的分离;如果您需要更改DTO的属性(例如:Name
更改为FirstName
(,那么您只需要在一个地方修改代码(fromDTO
工厂方法(。
作为旁注,在命名构造函数时,您应该考虑使用 BumpyCaps(即:第一个字符应该是大写的,即:MyClass
而不是像任何其他函数那样myClass
(。
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- FabricJs-限制主对象内添加对象的移动区域
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 值对象在某个变量发生更改后发生更改
- 使用 HTML + Javascript 的多项选择测验:回复:使用数组对象和属性更新分数(帮助分析代码)
- JSON 对象回复解析