Javascript 然而我';我发现很难理解JSON
嘿,伙计们,我读过这篇文章,所以我得到的是JSON是将JavaScript对象转换为PHP/C关联数组或对象(反之亦然)的最简单方法。 现在我的问题是下面代码中发生了什么,即没有JSON/XML,我仍然可以访问Javascript中的C#对象,可能是我错了,如果是,请纠正我: C# Javascript:这里我使用JQuery使用Autocomplete.jsJavascript 然而我';我发现很难理解JSON,javascript,.net,xml,json,Javascript,.net,Xml,Json,嘿,伙计们,我读过这篇文章,所以我得到的是JSON是将JavaScript对象转换为PHP/C关联数组或对象(反之亦然)的最简单方法。 现在我的问题是下面代码中发生了什么,即没有JSON/XML,我仍然可以访问Javascript中的C#对象,可能是我错了,如果是,请纠正我: C# Javascript:这里我使用JQuery使用Autocomplete.js function InitAutocomplete() { data = [<%=strItems %
function InitAutocomplete()
{
data = [<%=strItems %>].sort();
AutoComplete_Create('<%=txtItem.ClientId %>', data);
}
函数InitAutocomplete()
{
数据=[].sort();
自动完成创建(“”,数据);
}
请看,我在javascript和servertag中使用了strItems,那么JSON到底在哪里使用呢?net在内部做什么?我完全搞不清楚JSON/XML是如何用于数据传递的?虽然您可以不使用JSON就这样传递数据,但它不能确保所有数据都可以安全地传递,例如嵌入的
标记。使用JSON将以一种防止这种情况发生的方式对您的数据进行编码,您可以在JavaScript端对其进行解码,例如..您在这里并没有真正使用JSON。您只是为javascript生成一个字符串数组,并以非常简单的方式使用它
如果您希望将JSON转换为javascript对象,则需要修改程序并使用JSON解析器。JSON解析器有几种实现,但您提到jQuery是为了使用:
但是,使用jQuery进行解析需要严格格式化JSON(从v1.4开始)。请参阅正确的表格。基本上,在您的情况下,应该在字符串周围加双引号,并将整个数组放在方括号内
您的结果应该是这样的:
strItems = '['
Foreach(DataRow dr in dvItems.Table.Rows) //dvItems is a DataView
{
// TODO: Escape dr("ItemTitle") so it conforms to http://json.org/ => String
strItems &= "\"" & dr("ItemTitle") & "\"," //strItems is a String
}
strItems = strItems.Trim(",")
strItems &= ']'
<script type="text/javascript">
var jsonArr = <%=strItems%>;
var data = jQuery.parseJSON(jsonArr);
AutoComplete_Create('<%=txtItem.ClientId %>', data);
</script>
strItems='['
Foreach(dvItems.Table.Rows中的DataRow dr)//dvItems是一个数据视图
{
//TODO:转义dr(“ItemTitle”),使其符合http://json.org/ =>字符串
strItems&=“\”&dr(“ItemTitle”)&“\”,“//strItems是一个字符串
}
strItems=strItems.Trim(“,”)
横线&=']'
var jsonArr=;
var data=jQuery.parseJSON(jsonArr);
自动完成创建(“”,数据);
Ok,所以,仅出于安全原因,才使用JSON?实际上,很少使用JSON。许多人像你一样直接将数据注入JavaScript,这对安全性和完整性都有影响。你能解释一下这种方法(即直接将数据注入JavaScript)是如何不安全的,我只是想知道这种方法有时会失败?比如说,你的一个字符串由于某种未知原因包含”代码>。这将关闭脚本块,导致其余部分显示为页面的一部分。这本身不一定是一个安全问题,但它是一个完整性问题。哦,天哪,我没有想到这一点。。。thanx man,你创造了我的dayNo,它应该做的是使用一个.NET库生成JSON。手动生成JSON(或任何比纯文本更复杂的交换格式)是一种反模式。我同意这一点。在这种情况下,通常使用的和健壮的库应该始终是寻找实现的第一件事。如果我使用PHP,那么我应该手动生成JSON还是其他源代码,对于.net来说,有一个生成JSON的库,对于PHP呢?谷歌搜索“PHP JSON”(不带引号)。伙计们,我无法使用JSON
,字符串如何才能转换为JSON字符串?因为这里我的strItems
在序列化后输出'mouse'、'keyboard'、'Led'
,它变成了'mouse'、'keyboard'、'Led'
和autocomplete.js,除了'mouse'、'keyboard'、'Led'
格式的数据。。
strItems = '['
Foreach(DataRow dr in dvItems.Table.Rows) //dvItems is a DataView
{
// TODO: Escape dr("ItemTitle") so it conforms to http://json.org/ => String
strItems &= "\"" & dr("ItemTitle") & "\"," //strItems is a String
}
strItems = strItems.Trim(",")
strItems &= ']'
<script type="text/javascript">
var jsonArr = <%=strItems%>;
var data = jQuery.parseJSON(jsonArr);
AutoComplete_Create('<%=txtItem.ClientId %>', data);
</script>