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