是否有任何方法可以使用客户端上接收的javascript json数据进行类型和字段名检查
我的服务器上有以下类:是否有任何方法可以使用客户端上接收的javascript json数据进行类型和字段名检查,javascript,jquery,Javascript,Jquery,我的服务器上有以下类: public class JsonDialog { public IEnumerable<string> Errors { set; get; } public string Modified { set; get; } public string ModifiedBy { get; set; } public string PartitionKey { set; get; } public string Partiti
public class JsonDialog
{
public IEnumerable<string> Errors { set; get; }
public string Modified { set; get; }
public string ModifiedBy { get; set; }
public string PartitionKey { set; get; }
public string PartitionKeyNew { set; get; }
public string RowKey { get; set; }
public string RowKeyNew { get; set; }
public bool Success { set; get; }
}
在我的客户机代码中,我有以下内容:
$.ajax({
url: href,
dataType: 'json',
type: 'POST',
data: $form.serializeArray()
})
.done(onDone)
.fail(onFail);
var onDone = function (json, textStatus, XMLHttpRequest) {
json = json || {};
if (json.Success) {
因为我在服务器上使用一个类,编译器会检查以确保我没有任何拼写错误,例如,它不允许我输入“success=false”。但是,在客户端上没有检查,我可以编写json.sUccEss代码,这仍然可以,但它不会给我期望的结果
Javascript中是否有任何方法可以像在服务器上一样进行错误检查?像将数据放入类并让IDE检查类字段是否正确之类的事情?也许有好的文本编辑器可以帮助您,但Javascript没有这样的东西 像TextSublime这样的编辑器可以伪造代码内省,并进行文件内搜索以帮助键入相同的名称 像Eclipse或Netbeans这样的IDE做得更好,但离您想要的还很远。 Javascript不像Java或C那样是一种强类型语言(如果我们可以说它们是的话…),所以你无法找到VS和C的所有功能
这就是你想要的,但这并没有你想要的那么先进。可能有工具,但如果你能通过以下方式实现: 在控制器中,您呈现部分视图而不是json结果,并在该视图上传递类对象,然后在该视图上您必须编写objcetName.PropertyName并检查它。我通过在JS中创建一个匹配对象(部分)来解决这个问题,我称之为“工厂”方法(但如果你用的是所谓的“工厂”这个词,那就用错了。它实际上更类似于“铸造”,但由于JS没有强大的类型,这也不完全正确 显然,如果您所做的只是试图让intellisense工作,那么这个代码模式也是相当冗长的,但是如果您在JS端对象上有方法……我们将虚构地说:
JsonResult.prototype.markerrorsreeved
…那么这个模式对于您获得给定“类”的实例是很有帮助的
为了简洁起见,我将使用您的C#类作为JS的基础:
var JsonResult = function () {
this.Errors = [];
this.Modified = null;
this.ModifiedBy = null;
//...rest of your properties, defaulted as necessary
}
JsonResult.factory = function (o) {
var j = new JsonResult();
$.extend(j, o);
//do other processing here if needed (for example, ASP.NET serializes DateTime retardedly)
return j;
}
AJAX:
$.ajax({
success: function(json, status, xhr) {
var myobj = JsonResult.factory(json);
//VS2010 will now give you intellisense w/ proper property names on myobj
//Note: it's still buggy and sometimes won't detect things properly, but it usually works
}
});
根据您的IDE,您可能可以使用或。但这种支持仍然比C#等静态类型语言提供的支持要有限得多。JSLint怎么能告诉我服务器上出现的变量是否拼写不同?我使用的是VS2010,我不认为编辑器中有任何东西阻止我键入任何内容在json一词之后:-(我希望有某种方法可以将类编码为javascript。javascript不是ctrl+space语言。对不起,你找不到与C#或Java类似的语言。javascript不是一种强语言。这是一种允许启用此类高级代码内省功能的方法。很抱歉,你的回答对用户来说没有多大意义。)母语为英语的。@Blazemonger这就是为什么很棒的网站在左下角有一个编辑按钮。可能不是母语为英语的人。
$.ajax({
success: function(json, status, xhr) {
var myobj = JsonResult.factory(json);
//VS2010 will now give you intellisense w/ proper property names on myobj
//Note: it's still buggy and sometimes won't detect things properly, but it usually works
}
});