ASP利用xmlhttpPOST JSON数据案例解析

ASP在开发网站程序中,经常会用到数据发送与接收,在网上很难搜到好用的post json数据和接收json数据的案例。今天我分享一下案例心得,供还在ASP这门语言上的战友们使用。
IIS8.0以后的版本可用,以前版本的IIS没有测试。

POST页面

<%@codepage=65001%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<%
mch_id="12345678"
out_trade_no="1111-2222-3333"
sign="ASDFK2E4579QLKJLKADFASDLKFS"
action="http://127.0.0.1/receivejson.asp" 
data="{"&chr(34)&"mch_id"&chr(34)&":"&chr(34)&mch_id&chr(34)&","&chr(34)&"out_trade_no"&chr(34)&":"&chr(34)&out_trade_no&chr(34)&","&chr(34)&"sign"&chr(34)&":"&chr(34)&sign&chr(34)&"}"
response.write data&"<br><br>"
dim xmlHttp
Set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlHttp.Open "POST", action, False
xmlhttp.setRequestHeader "Content-Type", "application/json"
xmlHttp.send(data)
If xmlHttp.readystate = 4 Then
    result=xmlhttp.responseText
    Set obj = parseJSON(result) 
        out_trade_no=obj.out_trade_no
        mch_id=obj.mch_id
    Set obj = Nothing
    response.write "读取到receivejson页面的输出数据:"&result&"<br>解析后结果:<br>out_trade_no="&out_trade_no&"<br>mch_id="&mch_id
End If
Set xmlHttp = Nothing

'解析json 
Function parseJSON(str)  
	If Not IsObject(scriptCtrl) Then  
		Set scriptCtrl = Server.CreateObject("MSScriptControl.ScriptControl")  
		scriptCtrl.Language = "JScript"  
		scriptCtrl.AddCode "Array.prototype.get = function(x) { return this[x]; }; var result = null;"  
	End If  
	scriptCtrl.ExecuteStatement "result = " & str & ";"  
	Set parseJSON = scriptCtrl.CodeObject.result  
End Function

%>

简单的说一下,发送json页面一般用于各种接口,比如支付接口、短信接口等。

本程序功能:将mch_id,out_trade_no,sign等参数组合成json字符串,send到action网址,并读取action输出结果(也是json值)并解析字符串显示出来。

这里常见的坑有:
1、data 是 json格式,这个一定不能写错,而且,每个变量和值都需要用双引号chr(34)
2、action 必须是http或https开头的全网址,不能相对网址
3、解析json的函数可能会遇到编码问题,建议如我定义65001
程序每步都给了输出,可以自行调试修改。

接收页面

<%@codepage=65001%>
<%
function bytes2bstr(vin)
	dim bytesstream,stringreturn	
	set bytesstream = server.CreateObject("adodb.stream")	
	bytesstream.type = 2	
	bytesstream.open	
	bytesstream.writeText vin	
	bytesstream.position = 0	
	bytesstream.charset = "utf-8"	
	bytesstream.position = 2	
	stringreturn = bytesstream.readtext	
	bytesstream.close	
	set bytesstream = nothing	
	bytes2bstr = stringreturn
end function

'解析json 
Function parseJSON(str)  
	If Not IsObject(scriptCtrl) Then  
		Set scriptCtrl = Server.CreateObject("MSScriptControl.ScriptControl")  
		scriptCtrl.Language = "JScript"  
		scriptCtrl.AddCode "Array.prototype.get = function(x) { return this[x]; }; var result = null;"  
	End If  
	scriptCtrl.ExecuteStatement "result = " & str & ";"  
	Set parseJSON = scriptCtrl.CodeObject.result  
End Function


'获取Post中的字节流大小
getpostjson=Request.TotalBytes

if getpostjson=0 then	
	response.Write("json null")	
	response.End()
end if

'读取POST所传递的字节流
readjson=Request.BinaryRead(getpostjson) 

'将字节流转为字符串
json = bytes2bstr(readjson)
'response.write(json)

'解析JSON
Set obj = parseJSON(json) 
	out_trade_no=obj.out_trade_no
	mch_id=obj.mch_id
Set obj = Nothing

response.write "{"&chr(34)&"out_trade_no"&chr(34)&":"&chr(34)&out_trade_no&chr(34)&","&chr(34)&"mch_id"&chr(34)&":"&chr(34)&mch_id&chr(34)&"}"

%>

内容是完整分享的,细节自己看,Post过来的数据是json数据流,将其解析为字符串,解析后按json字符串格式重新输出。
接收部分内容来源于网络,本人收集一并分享给大家。

以上两部分内容,完整的包含了发送json数据、被动接收json数据、处理json数据、解析json并输出、发送页读取json数据的全过程。
欢迎交流,QQ9701220

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值