【发布时间】:2014-05-09 21:19:46
【问题描述】:
我的项目将使用 HTML 5 和 jQuery Mobile 前端,并通过 AJAX 来回传递 JSON 数据到与 MySQL 数据库对话的 C# ASP.NET 后端(下面的示例未显示任何后端 C# , MySQL 或 AJAX 代码呢)。
我已经弄清楚我的 JSON 对象(字符串?)会是什么样子,这是一个简化版本以节省空间:
{
"Events": {
"Common": {
"User": "string",
"PCBID": 52759,
"Notes": "string"
},
"Assign": {
"SBEPN": "string",
"SBEJobNumber": "string",
"SBESerialNumber": "string",
"SBEModelNumber": "string"
}
}
}
对于每个事件,公共节点将始终被填充,并且根据事件类型(分配、创建、修改等),一些数据将被填充,其余可用变量将不会被填充.为简洁起见,我只包含了 Assign 节点,但它下面还有五个其他稍微复杂一些的节点。
我想我可以将 JS 中的变量预先分配给null 或JSONObject.NULL,然后使用三元语句将其分配给用户提供的真实值,或者将其保留为空。我的想法是我不必在后面的 c# 代码中有一堆重载,我可以传入一大堆 JSON,然后根据填充或留空的内容来弄清楚如何处理它。这是我尝试声明变量的一种方式:
var user = JSONObject.NULL;
var pcbid = JSONObject.NULL;
var notes = JSONObject.NULL;
etc...
这些显示为未定义的 JSONObject,如果我改为将它们声明为 null,如下所示:
var user = null;
var pcbid = null;
var notes = null;
etc...
无论我是否对它们进行 JSON.stringify,它们都显示为 undefined 而不是 null。
这就是我将字符串分配给变量的方式:
user = $("#input_common_user").val() !== null ? $("#input_common_user").val() : JSONObject.NULL;
pcbid = $("#input_common_pcbid").val() !== null ? $("#input_common_pcbid").val() : JSONObject.NULL;
notes = $("#input_common_notes").val() !== null ? $("#input_common_notes").val() : JSONObject.NULL;
这里是a working fiddle with all the various variables & events defined。
我特意在这个例子中只填充了两个字段来简化测试。我希望得到一个我可以(最终)移交给 AJAX 的 JSON 对象,但我错过了一些东西。我还怀疑 JSONObject.NULL 可能不是 Javascript 构造,因为我实际上只能在 Android 和 Java 文档中找到它的引用,但似乎我仍然应该能够使用 null 代替它?
所以,我的问题是,如何将空值作为占位符放入 JSON 对象中,作为可能由用户填充或不填充的文本/整数/布尔值?
编辑以显示功能代码(请参阅上面小提琴链接中的完整示例):
声明我的 JS 对象:
var pcbClientEvent = {
eventType: {
common: {
user: null,
pcbid: null,
notes: null
},
assign: {
sbePN: null,
sbeJobNumber: null,
sbeSerialNumber: null,
sbeModelNumber: null
}
}
};
并在填写表格后对其进行操作(请参阅上面小提琴链接中的完整示例):
pcbClientEvent.eventType.common.user = $("#input_common_user").val() !== undefined ? $("#input_common_user").val() : pcbClientEvent.eventType.common.user;
pcbClientEvent.eventType.common.pcbid = $("#input_common_pcbid").val() !== undefined ? $("#input_common_pcbid").val() : pcbClientEvent.eventType.common.pcbid;
pcbClientEvent.eventType.common.notes = $("#input_common_notes").val() !== undefined ? $("#input_common_notes").val() : pcbClientEvent.eventType.common.notes;
pcbClientEvent.eventType.assign.sbePN = $("#input_assign_sbePN").val() !== undefined ? $("#input_assign_sbePN").val() : pcbClientEvent.eventType.assign.sbePN;
pcbClientEvent.eventType.assign.sbeJobNumber = $("#input_assign_sbeJobNumber").val() !== undefined ? $("#input_assign_sbeJobNumber").val() : pcbClientEvent.eventType.assign.sbeJobNumber;
pcbClientEvent.eventType.assign.sbeSerialNumber = $("#input_assign_sbeSerialNumber").val() !== undefined ? $("#input_assign_sbeSerialNumber").val() : pcbClientEvent.eventType.assign.sbeSerialNumber;
pcbClientEvent.eventType.assign.sbeModelNumber = $("#input_assign_sbeModelNumber").val() !== undefined ? $("#input_assign_sbeModelNumber").val() : pcbClientEvent.eventType.assign.sbeModelNumber;
【问题讨论】:
标签: c# javascript jquery json asp.net-ajax