在Web开发中,ASP(Active Server Pages)和JSON(JavaScript Object Notation)是两种常用的技术,ASP用于服务器端脚本编程,而JSON是一种轻量级的数据交换格式,本文将探讨ASP如何输出JSON数据,并介绍相关技巧和注意事项。
ASP与JSON简介
ASP是一种由微软开发的动态服务器页面技术,允许开发者在HTML页面中嵌入VBScript或JScript代码,以实现服务器端逻辑处理。
JSON是一种基于文本的轻量级数据交换格式,易于阅读和编写,同时也易于机器解析和生成,它支持基本的数据类型,如字符串、数字、布尔值和对象。
ASP输出JSON数据
1 使用ASP内置对象
ASP提供了内置对象,如Response,可以用来发送数据到客户端,以下是一个简单的示例:
在这个例子中,我们设置了响应的MIME类型为
application/json
,然后使用
Response.Write
方法输出了一个JSON对象。
2 使用JSON对象
为了更灵活地构建JSON数据,可以使用ASP的
Scripting.Dictionary
对象来创建复杂的JSON结构。
<%Dim dictSet dict = CreateObject("Scripting.Dictionary")dict("name") = "John"dict("age") = 30dict("city") = "New York"Response.ContentType = "application/json"Response.Write(StructToJSON(dict))%><%Function StructToJSON(obj)Dim jsonjson = "{"Dim keyFor Each key In obj.Keysjson = json & """" & key & """:"If VarType(obj(key)) = vbObject Thenjson = json & StructToJSON(obj(key))Elsejson = json & CStr(obj(key))End Ifjson = json & ","NextIf Len(json) > 1 Thenjson = Left(json, Len(json) - 1)End Ifjson = json & "}"StructToJSON = jsonEnd Function%>
在这个例子中,我们首先创建了一个
Scripting.Dictionary
对象,然后填充了数据,我们定义了一个
StructToJSON
函数,用于将结构化数据转换为JSON格式。
注意事项
1 性能考虑
在处理大量数据时,直接在ASP中生成JSON可能会影响性能,在这种情况下,可以考虑使用专门的库或工具来处理JSON数据。
2 安全性
在输出JSON数据时,要注意避免SQL注入、XSS攻击等安全问题,确保对用户输入进行适当的验证和清理。
Q1:ASP输出JSON数据时,是否可以支持复杂的嵌套结构?
A1:是的,ASP可以支持复杂的嵌套结构,通过使用
Scripting.Dictionary
对象和递归函数,可以构建任意深度的JSON对象。
Q2:在ASP中输出JSON数据时,如何处理特殊字符?
A2:在输出JSON数据时,特殊字符(如引号、反斜杠等)需要被转义,可以使用JavaScript的
JSON.stringify
方法来自动处理这些字符的转义,在ASP中,可以通过编写自定义函数来实现类似的功能。
ASP调用html内容
编码挺费劲, 纯原创.
<%Function getData(url)On Error Resume NextDim objReqSet objReq = () GET, url, ()If <> 4 ThenExit FunctionEnd IfgetData = Encode()Set objReq = NothingIf <> 0 then End Function
Function Encode(vIn)Dim strReturnDim i, ThisCharCode, NextCharCodestrReturn = For i = 1 To LenB(vIn)ThisCharCode = AscB(MidB(vIn,i,1))If ThisCharCode < &H80 ThenstrReturn = strReturn & Chr(ThisCharCode)ElseNextCharCode = AscB(MidB(vIn,i+1,1))strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))i = i + 1End IfNextEncode = strReturnEnd Function
Dim dataBack, strNick, strCity dataBack = Trim(getData(= Right(dataBack, Len(dataBack) - InStr(dataBack, nick) - 6)strNick = Left(strNick, InStr(strNick, isDispAge) - 5)
strCity = Right(dataBack, Len(dataBack) - InStr(dataBack, city) - 6)strCity = Right(strCity, Len(strCity) - InStr(strCity, city) - 6)strCity = Left(strCity, InStr(strCity, birthday) - 5)
(昵称: & strNick &
)(城市: & strCity)%>
在UWP中,如何实现通过服务器为设备推送通知?
对于某些类型的应用来说,服务器推送事件是最佳的选择。 本文对服务器推送技术进行了详细的介绍,包含浏览器端和服务器端的相应实现细节,为在实践中使用该技术提供了指南。 对于一般的Web应用开发,大多数开发人员并不陌生。 在Web应用中,浏览器和服务器之间使用的是请求/响应的交互模式。 浏览器发出请求,服务器根据收到的请求来生成相应的响应。 浏览器再对收到的响应进行处理,展现给用户。 响应的格式可能是HTML、XML或JSON等。 随着REST架构风格和AJAX的流行,服务器地使用JSON作为响应的数据格式。 Web应用使用XMLHttpRequest对象来发送请求,并根据服务器端返回的数据,对页面的内容进行动态更新。 通常来说,用户在页面上的操作,比如点击或移动鼠标,会触发相应的事件。 由XMLHttpRequest对象来发出请求,得到服务器响应之后进行页面的局部更新。 这种方式的不足之处在于:服务器端产生的数据变化不能及时地通知浏览器,而是需要等到下次请求发出时才能被浏览器获取。 对于某些对数据实时性要求很高的应用来说,这种延迟是不能接受的。 为了满足这类应用的需求,就需要有某种方式能够从服务器端推送数据给浏览器,以保证服务器端的数据变化可以在第一时间通知给用户。 目前常见的解决法有不少,主要可以分成两类。 这两类方法的区别在于是否基于HTTP协议来实现。 不使用HTTP协议的做法是使用html5新增的WebSocket规范,而使用HTTP协议的做法则包括简易轮询、COMET技术和本文中要介绍的HTML5服务器推送事件。 下面会对这几种技术进行介绍。 简介在介绍HTML5服务器推送事件之前,首先介绍一些上面提到的几种服务器端数据推送技术。 第一种是WebSocket。 WebSocket规范是HTML5中的一个重要组成部分,已经被很多主流浏览器所支持,也有不少基于WebSocket开发的应用。 正如名称所表示的一样,WebSocket使用的是套接字连接,基于TCP协议。 使用WebSocket之后,实际上在服务器端和浏览器之间建立一个套接字连接,可以进行双向的数据传输。 WebSocket的功能是很强大的,使用起来也灵活,可以适用于不同的场景。 不过WebSocket技术也比较复杂,包括服务器端和浏览器端的实现都不同于一般的Web应用。 除了WebSocket之外,其他的实现方式是基于HTTP协议来达到实时推送的效果。 第一种做法是简易轮询,即浏览器端定时向服务器端发出请求,来查询是否有数据更新。 这种做法比较简单,可以在一定程度上解决问题。 不过对于轮询的时间间隔需要进行仔细考虑。 轮询的间隔过长,会导致用户不能及时接收到更新的数据;轮询的间隔过短,会导致查询请求过多,增加服务器端的负担。 COMET技术改进了简易轮询的缺点,使用的是长轮询。 长轮询的方式在每次请求时,服务器端会保持该连接在一段时间内处于打开状态,而不是在响应完成之后就立即关闭。 这样做的好处是在连接处于打开状态的时间段内,服务器端产生的数据更新可以被及时地返回给浏览器。 当上一个长连接关闭之后,浏览器会立即打开一个新的长连接来继续请求。 不过COMET技术的实现在服务器端和浏览器端都需要第三方库的支持。 综合比较上面提到的4种不同的技术,简易轮询由于其本身的缺陷,并不推荐使用。 COMET技术并不是HTML5标准的一部分,从兼容标准的角度出发,也不推荐使用。 WebSocket规范和服务器推送技术都是HTML5标准的组成部分,在主流浏览器上都提供了原生的支持,是推荐使用的。 不过WebSocket规范更加复杂一些,适用于需要进行复杂双向数据通讯的场景。 对于简单的服务器数据推送的场景,使用服务器推送事件就足够了。 在浏览器支持方面,服务器推送事件已经在除IE外的大部分桌面和移动浏览器上得到了支持。 支持服务器推送事件的浏览器及其版本包括:Firefox6.0+、Chrome6.0+、Safari5.0+、Opera11.0+、iOSSafari4.0+、OperaMobile11.1+、ChromeforAndroid25.0+、FirefoxforAndroid19.0+以及BlackberryBrowser7.0+等。 关于IE的支持,在下面的章节中有详细的介绍。 下面对服务器推送事件的规范进行具体的说明。 规范Server-sentEvents规范是HTML5规范的一个组成部分,具体的规范文档见参考资源。 该规范比较简单,主要由两个部分组成:第一个部分是服务器端与浏览器端之间的通讯协议,第二部分则是在浏览器端可供JavaScript使用的EventSource对象。 通讯协议是基于纯文本的简单协议。 服务器端的响应的内容类型是“text/event-stream”。 响应文本的内容可以看成是一个事件流,由不同的事件所组成。 每个事件由类型和数据两部分组成,同时每个事件可以有一个可选的标识符。 不同事件的内容之间通过仅包含回车符和换行符的空行(“\r\n”)来分隔。 每个事件的数据可能由多行组成。 代码清单1给出了服务器端响应的示例。 清单1.服务器端响应的示例data:firsteventdata:secondeventid:100event:myeventdata:thirdeventid:101:thisisacommentdata:fourtheventdata:fourtheventcontinue如代码清单1所示,每个事件之间通过空行来分隔。 对于每一行来说,冒号(“:”)前面表示的是该行的类型,冒号后面则是对应的值。 可能的类型包括:类型为空白,表示该行是注释,会在处理时被忽略。 类型为data,表示该行包含的是数据。 以data开头的行可以出现多次。 所有这些行都是该事件的数据。 类型为event,表示该行用来声明事件的类型。 浏览器在收到数据时,会产生对应类型的事件。 类型为id,表示该行用来声明事件的标识符。 类型为retry,表示该行用来声明浏览器在连接断开之后进行再次连接之前的等待时间。 在代码清单1中,第一个事件只包含数据“firstevent”,会产生默认的事件;第二个事件的标识符是100,数据为“secondevent”;第三个事件会产生类型为“myevent”的事件;最后一个事件的数据为“fourthevent\nfourtheventcontinue”。 当有多行数据时,实际的数据由每行数据以换行符连接而成。 如果服务器端返回的数据中包含了事件的标识符,浏览器会记录最近一次接收到的事件的标识符。 如果与服务器端的连接中断,当浏览器端再次进行连接时,会通过HTTP头“Last-Event-ID”来声明最后一次接收到的事件的标识符。 服务器端可以通过浏览器端发送的事件标识符来确定从哪个事件开始来继续连接。 对于服务器端返回的响应,浏览器端需要在JavaScript中使用EventSource对象来进行处理。 EventSource使用的是标准的事件监听器方式,只需要在对象上添加相应的事件处理方法即可。 EventSource提供了三个标准事件,如表1所示。 表对象提供的标准事件名称说明事件处理方法open当成功与服务器建立连接时产生onopenmessage当收到服务器发送的事件时产生onmessageerror当出现错误时产生onerror如之前所述,服务器端可以返回自定义类型的事件。 对于这些事件,可以使用addEventListener方法来添加相应的事件处理方法。 代码清单2给出了EventSource对象的使用示例。 清单对象的使用示例vares=newEventSource(events);=function(e){();};(myevent,function(e){();});如代码清单2所示,在指定URL创建出EventSource对象之后,可以通过onmessage和addEventListener方法来添加事件处理方法。 当服务器端有新的事件产生,相应的事件处理方法会被调用。 EventSource对象的onmessage属性的作用类似于addEventListener(‘message’),不过onmessage属性只支持一个事件处理方法。 在介绍完服务器推送事件的规范内容之后,下面介绍服务器端的实现。
B-BOY和BREAKING的区别是什么?
BREAKING霹雳舞. 跳BREAKING的舞者男孩一般叫B-BOY,女孩叫B-GIRL. 其他的舞种的可以统称为DANCER.. 这是两种完全不同的定义. B-BOY特制是跳霹雳舞的男孩. 而BREAKING是特指舞种. BREANKING是那种注重技巧和爆发力的舞种,适合男孩子跳 其他的舞种男女皆仪,, 每个舞种都还有不同的风格.... 很复杂滴 下面是BREAKING的专用名词介绍 记号(*)将标示出动作的困难度。 五个(*)是最高难度的,一个(*)则是最简单的。 B-BOY Breaking Boy, Boogie Boy,只要是跳Breaking的都叫B-Boy。 CREW B-Boy的团体。 BATTLE 个人或B-Boy团体间的挑战(俗称尬舞)。 BURNED 专门用来指称在尬舞时被打败的团体或个人。 ROUTINES 由几个舞者一起连结或执行舞蹈动作。 PERFECTIONS 指的是一个B-Boy最好的动作。 WACKED或WACK 当一个人做错了动作。 SLIDES 拉着自己滑过地板。 Slide这个名字就告诉B-Boy该做滑的动作。 BITE 从别人那里偷学动作。 1990(***) B-Boy倒立且旋转,然后随着身体重量的移转由一只手换到另一只手做动作,做到脚着地为止。 (俗称手转) 2000(/forum/*) 用一只手倒立,尽可能的旋转直到脚着地为止.(又称倒立手转)。 AIRPLANES(/forum/) 风车加上双手向两旁尽量伸展高到你可以以抓住它们。 AIRSWIPES(*) 开始时,双手双脚都放在地上,脸朝上。 一只手支撑住身体的重量脚往上踢然后旋转,在脚着地前另一只手先着地。 如果做的正确的话应该整个身体都能旋转到。 APPLEJACKS(**) 一个最基本的动作向其它B-Boy挑战尬舞。 双脚蹲下,背向后仰双手支撑,然后一只脚向空中踢,踢的越高越好。 然后双脚向后跳跃,重复。 TOW-LEGGED APPLEJACKS 和Applejacks一样,不同的是并非踢一只脚,而是踢两只脚。 BACKSPIN(***) 利用背部作旋转的表演。 所有的重量平衡在背的上半部,脚缩起来尽量靠近身体。 旋转的要诀就是双脚在空中做圆形的划动。 (俗称背旋) BACKSWIPE(***) 和Airswipe是相同的,但是除了当你的脚在一半的时候加进来,你改变方向回到开始时的动作。 BARRELS(/forum/) 风车,双手环抱在前。 BELLYMILL(/forum/) 就像风车一样,不同的是他不是用手或用头去转,而是用胃(肚皮)。 BHUDDA(/forum/) 和UFO类似,除了膝盖是在伸直的双手中,然后双脚是离开地面的。 BOOMERANG(/forum/*) 开始时坐在地上,双脚在身前形成V字形。 然后手撑在双脚间,接下来撑起身体,只有手能碰地。 然后转圈。 BRONCO(**) 先从脚开始,然后是只有一只手向下,脚往后踢然后脚又再次放下,重复所有的动作。 BUNNYHOP(/forum/*) 类似像Flare,不同的是双脚在身前伸直向上,然后转圈上下跳动。 CANNOABALL(/forum/) 在Cannonball的动作中双手环抱着膝盖。 CRAZYLEGS(/forum/) 就像Airswipes,但不只做一个。 作Airswipes一次又一次且动作中间不停顿。 CRICKETS(/forum/) 一个几乎和Handglide相同的旋转动作,除了当旋转的手离开地面旋转又重回地面时,会有偶而重量转变成为推挤手。 如果做的好,看起来就像是连续的旋转动作。 DOUBLE99(/forum/*) 就像作一个2000(Onehand99),但是当你要放下一只手换成另一只手时,踢脚以得到速度然后续作2000(Onehand99)的动作,每一只手持续的作不停下来。 downROCK(*) 用手的中心支撑着整个舞者的重量然后腿和脚持续的作有节奏的圆形的舞动,腿和脚的动作又是绕着手的动作做。 通常会结合Freezes和Hesitations动作,并且是在其它动作之后紧接着做。 ELBOWGLIDE(/forum/) 动作和位置类似像手转,不一样的是用手轴转而手释放在腹部的位置。 FLARE(/forum/) 类似像风车,脚一样要在空中做很大的圆圈,但是不要动肩膀,而是将重量放在双手上。 FISTGLIDE(/forum/) 动作和位置类似像手转,不一样的是用拳头转。 FLOAT(*) 用手让身体做水平的平衡,但是除了脚之外,脚要弯曲以帮助平衡。 GENIES(/forum/) 用手作风车并且横跨过整个胸部。 GODOWN 当B-Boy在尬舞时,当他很有可能会输掉时所做的动作。 HALO(/forum/*) 风车的动作,但是却不是由肩膀转到肩膀而是用头去转。 (俗称刷头风车) HANDGLIDE(/forum/) 和Bboy在做Float的动作相似,不同的是只有一只手支撑身体,另一只手帮忙去推着旋转。 (我们称为直升机) HEADSLIDE(**) 当一个Headslide动作完成后反转,用头停住。 HEADSPIN(/forum/) 用你的头转。 要用手和脚去开始旋转。 (就是头转) HELICOPTER(*) 一只脚在身体下另一只脚向外伸展,另一支伸展的脚则是做Horozontalplane画圆动作时仍然持续伸直,然后越过另一只脚底下在绕道前面去。 Hesititations(FREEZE)(**) 停止或暂停,在做Downrock圆圈动作时。 KIP-UP(**) 背部平躺撑起,脚在后面转动然后把脚踢向空中,上半身跟着起来再用脚着地。 MUNCHMILLS(/forum/) 类似像风车一样,不同的是脚都是交*弯曲的。 KNEESPIN(***) 所有的重量都平衡在碰到地板的那一只膝盖上。 另一只脚则伸起在高处。 旋转的要诀就是利用双手去推。 速度的增加是在一连串动作做完后靠着在后面的脚拉向自己的身体以产生速度。 NECKMOVE(***) 只转一下的风车。 NUTCRACKERS(/forum/) 用手盖住胯下的部分作风车。 RUBBERBAND(/forum/) Bboy作Kip-Ups的动作然后背部下降再重复做一次Kip-Up。 SPIDER(***) 这被认为是一个很需要弹性的动作。 大腿放在背后,膝盖放在肩膀上靠近耳朵的位置,小腿在前面,重量平衡在手或是脚或是两者。 SUICIDE(***) B-Boy做一个Frontflip的动作,然后背部平躺在地上,做这样的动作而没有伤到自己。 SUMOS(/forum/) 抓着膝盖作风车。 SUPERMANS(/forum/) 用胸部作风车而手伸向前。 SWIRLS(***) 和Handglide类似,不同的是用前臂旋转而不是手。 TOMBSTONES(/forum/) 双脚合拢,身体成L形。 不用手。 TOPROCK(*) 基本的直立的舞步.可能有很多不同的影响而且每一个人做的也不一样.通常备用来作为一段舞蹈开市的前导,或是Downrocking舞蹈中一组舞蹈和一组舞蹈中间的衔接,或是在激烈的舞蹈动作之后给自己一个休息的时间。 TURTLE(/forum/) Float的动作中身体整个做完整的旋转演出。 旋转动作的完成是靠着重量从一只手臂转换至另一只手臂,然后手做圆形的动作而不运用身体的力量,另一只手再做同样的动作。 TWOLEGGEDAPPLEJACKS(***) 和Applejacks一样,不同的是并非踢一只脚,而是踢两只脚。 UFO(/forum/) 和Turtle相似的旋转动作,不同的是身体是直立的,蹲下,双手伸直,膝盖在手外面,脚不着地。 UPROCK(/forum/) Uprock是一种舞蹈的战斗,舞者之间非常靠近但却不触碰到,很像功夫的战斗,但是有更多持续的动作和律动。 (俗称战斗舞) WINDMILL(/forum/) B-Boy从一个肩膀转向另一个肩膀,双脚持续的在空中旋转。 WORM(***) B-Boy用腹部躺着,做波浪形的动作从前到后,看起来就像一只虫在蠕动。 (台湾有人称为蟒蛇) COPOEIRA 流畅的舞蹈动作做的相当贴近地面,动作随着上升的旋律来做,或是击败对手的攻击。 RUBBER BAND B-Boy作Kip-Ups的动作然后背部下降再重覆做一次Kip-Up














发表评论