Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 然而我';我发现很难理解JSON_Javascript_.net_Xml_Json - Fatal编程技术网

Javascript 然而我';我发现很难理解JSON

Javascript 然而我';我发现很难理解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 %

嘿,伙计们,我读过这篇文章,所以我得到的是JSON是将JavaScript对象转换为PHP/C关联数组或对象(反之亦然)的最简单方法。

现在我的问题是下面代码中发生了什么,即没有JSON/XML,我仍然可以访问Javascript中的C#对象,可能是我错了,如果是,请纠正我:

C#

Javascript:这里我使用JQuery使用Autocomplete.js

   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>