ASP 处理JSON数据的实现代码

 今天看网页才发现了ASP也能处理JSON数据?呵呵,刚才论坛上看到一个兄弟写的文章,没有测试,不过理论上一定是可以的,之前脚本之家小编也发过类似的文章都可以看下

ASP也能处理JSON数据?呵呵,刚才在Pjblog论坛上看到一个兄弟写的文章,没有测试,不过理论上一定是可以的~ 太晚了,不测试了。

以前处理JSON太麻烦了,输出还好说,循环一下就可以了,解析真的很头疼。所以遇到 这种问题API问题,一般都是XML处理,不太喜欢,很麻烦。


<%
Dim sc4Json 
Sub InitScriptControl
Set sc4Json = Server.CreateObject("MSScriptControl.ScriptControl")
  sc4Json.Language = "JavaScript"
  sc4Json.AddCode "var itemTemp=null;function getJSArray(arr, index){itemTemp=arr[index];}"
End Sub
  
Function getJSONObject(strJSON)
  sc4Json.AddCode "var jsonObject = " & strJSON
  Set getJSONObject = sc4Json.CodeObject.jsonObject
End Function
  
Sub getJSArrayItem(objDest,objJSArray,index)
  On Error Resume Next
  sc4Json.Run "getJSArray",objJSArray, index
  Set objDest = sc4Json.CodeObject.itemTemp
  If Err.number=0 Then Exit Sub
  objDest = sc4Json.CodeObject.itemTemp
End Sub
  
Dim strTest
strTest = "{name:""alonely"", age:24, email:[""ycplxl1314@163.com"",""ycplxl1314@gmail.com""], family:{parents:[""父亲"",""母亲""],toString:function(){return ""家庭成员"";}}}"
Dim objTest
Call InitScriptControl
Set objTest = getJSONObject(strTest)
%>
<%=objTest.name%>的邮件地址是< %=sc4Json.Eval("jsonObject.email[0]")%><br />共有邮件地址< %=objTest.email.length%>个<br />
<%
Dim father
getJSArrayItem father, objTest.family.parents, 0
Response.Write father
%>

更多相关ASP 处理JSON的文章可以继续往下看

https://www.jb51.net/article/119096.htm

ASP输出JSON数据及客户端jQuery处理方法

 首先ASP处理JSON需要json官方提供的JSON For ASP 封装类文件,下载地址:http://code.google.com/p/aspjson/downloads/list
下载最新的JSON_2.0.4.asp文件备用。
1.ASP简单JSON对像及数组输出
Demo1.asp

<%@LANGUAGE=”VBSCRIPT” CODEPAGE=”65001″%>
<% Response.Charset = “UTF-8″ %>
<% Response.ContentType = “text/JSON” %>
<!–#include file=”../Inc/JSON_2.0.4.asp”–>
<%
Dim Json,Array(4)
Set Json = jsObject()
Json(“Title”) = ” ASP输出JSON数据及客户端jQuery 处理方法”
Json(“Url”) = “#”
Json(“PubDate”) = Now()
Array(0) = “QQ空间”
Array(1)= “腾讯微博”
Array(2)= “新浪微博”
Array(3)= “网易微博”
Array(4)= “搜狐微博”
Set Json(“Share”) = jsArray() ‘数组对像
Json(“Share”) = Array ‘ASP数组直接传给JSON数组对像
Json.Flush
Set Json = Nothing
%>

前台请求页面Demo1.html

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>ASP输出JSON数据及客户端jQuery 处理方法</title>
<script type=”text/javascript” src=”../Scripts/jquery-1.7.2.min.js”></script>
<script type=”text/javascript”>
$(document).ready(function(){
$(“#btn”).click(function(){
$.getJSON(“Demo1.asp”,function(data){
$(“#View”).html(“标题:”+data.Title+”<br />URL:”+data.Url+”<br />时间:”+data.PubDate+”<br />分享:”);
$.each(data.Share,function(i,n){//遍历数组
$(“#View”).append(n + ” | “);
});
});
});
});
</script>
</head>
<body>
<input type=”button” id=”btn” value=”显示” />
<div id=”View”></div>
</body>
</html>
是不是很简单呀?
2.ASP数据库数据输出JSON
Demo2.asp

<%@LANGUAGE=”VBSCRIPT” CODEPAGE=”65001″%>
<% Response.ContentType = “application/json; charset=utf-8″ %>
<!–#include file=”../Inc/JSON_2.0.4.asp”–>
<!–#include file=”../Inc/Conn.asp”–>
<%
Function QueryToJSON(dbc, sql) ‘此函数来自JSON官方JSON_UTIL_0.1.1.asp
Dim rs, jsa
Set rs = dbc.Execute(sql)
Set jsa = jsArray()
While Not (rs.EOF Or rs.BOF)
Set jsa(Null) = jsObject()
For Each col In rs.Fields
jsa(Null)(col.Name) = col.Value
Next
rs.MoveNext
Wend
Set QueryToJSON = jsa
End Function
SQLstr = “SELECT U_ID,U_Name,U_Age,U_Sex FROM User LIMIT 0,10″  ’这里使用的是MySQL数据库
Response.Write QueryToJSON(Conn, SQLstr).Flush
%>
前台页面Demo2.html
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>ASP输出JSON数据及客户端jQuery 处理方法</title>
<script type=”text/javascript” src=”../Scripts/jquery-1.7.2.min.js”></script>
<script type=”text/javascript”>
$(document).ready(function(){
$(“#btn”).click(function(){
$.getJSON(“Demo2.asp”,function(data){
$.each(data,function(i,n){
var $tr = $(“#View”).find(“tr.Demo”).clone();
$tr.removeClass(“Demo”);
$tr.find(“td:eq(0)”).text(n.U_ID);//第一个td
$tr.find(“td:eq(1)”).text(n.U_Name);
$tr.find(“td:eq(1)”).text(n.U_Name);
$tr.find(“td:eq(2)”).text(n.U_Age);
$tr.find(“td:eq(3)”).text(n.U_Sex);
$(“#View”).append($tr);
});
$(“#View”).find(“tr.Demo”).remove();//移除空行
});
});
});
</script>
</head>
<body>
<input type=”button” id=”btn” value=”显示” />
<table width=”360″ border=”1″ id=”View”>
<tr>
<td align=”center”><strong>ID</strong></td>
<td align=”center”><strong>姓名</strong></td>
<td align=”center”><strong>年龄</strong></td>
<td align=”center”><strong>性别</strong></td>
</tr>
<tr class=”Demo”>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>
ASP利用JSON官方类输出JSON就是这么简单。
本例在Windows 2008R2+MySQL5.5+ASP环境下测试通过。
http://code.google.com/p/aspjson/ 有详细的说明和下载,希望本文对您的ASP编程有所帮助。
原文:http://www.cnblogs.com/meetrice/p/4466355.html

一套绝佳的图标字体库和CSS框架

Font Awesome

一套绝佳的图标字体库和CSS框架

font-awesome-4.7.0


http://fontawesome.dashgame.com/

千博企业网站管理系统HitCount.Asp页面注入漏洞

在HitCount.Asp这个文件里发现,文件没有调用防注入代码

就是这个文件了。我们来构造注入语句

如下:

获取管理密码:

https://www.webshell.cc/hitcount.asp?lx=Qianbo_about&id=1%20and%201=2%20union%20select%20password%20from%20qianbo_admin

获取管理帐号:

https://www.webshell.cc/hitcount.asp?lx=Qianbo_about&id=1%20and%201=2%20union%20select%20adminname%20from%20qianbo_admin

找后台就访问http://www.webshell.cc/sitemap.xml吧!

拿SHELL:

IIS的asp;分号解析漏洞还是害了不少人,千博企业网站管理系统.后台拿SHELL依旧是修改模板*.asp;*生成。

千博企业网站管理系统HitCount.Asp页面注入漏洞:https://www.webshell.cc/3508.html

文章p标签css首行缩进text-indent后,图片img怎么设置不缩进解决办法

段落前面空两个字的距离,不要再使用空格了。应该使用首行缩进text-indent。

text-indent可以使得容器内首行缩进一定单位。比如中文段落一般每段前空两个汉字。

<style type="text/css">

p{

text-indent: 2em; /*em是相对单位,2em即现在一个字大小的两倍*/

}

</style>

注:div标签不要忘记起始符。text-indent只对p或div标签有效,对br标签不生效,原因是br标签是换行标签不是分段标签。

用CSS实现段落首缩进两个字符,实现首行缩进的通用方法是加四个小角空格。

在style里定义如下缩进样式:.suojin{text-indent:2em}

在需要缩进的地方使用class="suojin"即可,比如用一个div定义一整块段落首先缩进,

凡在div区域里,浏览器一碰上p语句(即一个新段的开始),就会执行.suojin所定义的缩进。

也可以在正文中使用嵌入式CSS样式来定义,下面举个实例(使用时请将尖括号改为小角尖括号):

<div style="text-indent:2em">

<p>段落一</p>

<p>段落二</p>

<p>段落三<p>

</div>

可加了这个缩进后当遇到正文内容中有独立段落的图片时,图片也会被缩进,这样会很影响排版。而且对于缩进后的图片大小也不好把握,对于自适应主题尤其如此。所以很多人因为搞不定图片这个问题最后放弃了使用段落首行缩进。

其实text-indent有个很奇怪的属性,就是其内部元素遇到float或者display: block后就不继承外部这个缩进的属性了,也就是说,只要给图片加上float或者display: block的 CSS 属性后,图片的缩进会自动失效。

但是为了排版的效果,一般都使用display:block;,这样图片就不会与文字并排,图片单独占一行。

Javascript限制网页只能在微信内置浏览器中访问

<script type="text/javascript">

    // 对浏览器的UserAgent进行正则匹配,不含有微信独有标识的则为其他浏览器

   var useragent = navigator.userAgent;

    if (useragent.match(/MicroMessenger/i) != 'MicroMessenger') {

        // 这里警告框会阻塞当前页面继续加载

       alert('已禁止本次访问:您必须使用微信内置浏览器访问本页面!');

        // 以下代码是用javascript强行关闭当前页面

       var opened = window.open('about:blank', '_self');

        opened.opener = null;

        opened.close();

    }

</script>

让你的微信小程序具有在线支付功能

最近需要在微信小程序中用到在线支付功能,于是看了一下官方的文档,发现要在小程序里实现微信支付还是很方便的,如果你以前开发过服务号下的微信支付,那么你会发现其实小程序里的微信支付和服务号里的开发过程如出一辙,下面我就具体说一下小程序里微信支付的开发流程和注意点。

1.开通微信支付和微信商户号

这个过程就和开通服务号的微信支付过程一样,没有什么可以说的。

2.获得用户的openid

首页我们需要在小程序的客户端js中获取当前用户的openid,通过调用wx.login方法可以得到用户的code,然后开发者服务器使用登录凭证 code 获取 openid。

wx.login({

     success: function(res) {

       if (res.code) {

         //发起网络请求

         wx.request({

           url: 'https://yourwebsit/onLogin',

           method: 'POST',

           data: {

             code: res.code

           },

           success: function(res) {

               var openid = res.data.openid;

           },

           fail: function(err) {

               console.log(err)

           }

         })

       } else {

         console.log('获取用户登录态失败!' + res.errMsg)

       }

     }

   });

var code = req.param("code");

       request({

           url: "https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code",

           method: 'GET'

       }, function(err, response, body) {

           if (!err && response.statusCode == 200) {

               res.json(JSON.parse(body));

           }

       });

3.获取prepay_id和支付签名验证paySign

这一步的过程就和服务号里的微信支付过程一样,分为客户端和服务器端

首先来看一下客户端js

在服务号里,我们是通过如下的代码来调起支付功能


function jsApiCall()

       {

           WeixinJSBridge.invoke(

               'getBrandWCPayRequest',

               {

                  "appId":"",     //公众号名称,由商户传入    

                  "timeStamp":"",         //时间戳,自1970年以来的秒数    

                  "nonceStr":"", //随机串    

                  "package":"prepay_id=<%=prepay_id%>",    

                  "signType":"MD5",         //微信签名方式:    

                  "paySign":"<%=_paySignjs%>" //微信签名

               },

               function(res){

                   WeixinJSBridge.log(res.err_msg);

                   if( res.err_msg =="get_brand_wcpay_request:ok"){

                       alert("支付成功!");

                   }else{

                       alert("支付失败!");

                   }

               }

           );

       }

在小程序里,我们是通过wx.requestPayment方法来调起支付功能,当然在这之前,我们先要获取prepay_id。


             wx.request({

                   url: 'https://yourwebsit/service/getPay',

                   method: 'POST',

                   data: {

                     bookingNo:bookingNo,  /*订单号*/

                     total_fee:total_fee,   /*订单金额*/

                     openid:openid

                   },

                   header: {

                       'content-type': 'application/json'

                   },

                   success: function(res) {

                       wx.requestPayment({

                         'timeStamp':timeStamp,

                         'nonceStr': nonceStr,

                         'package': 'prepay_id='+res.data.prepay_id,

                         'signType': 'MD5',

                         'paySign': res.data._paySignjs,

                         'success':function(res){

                             console.log(res);

                         },

                         'fail':function(res){

                             console.log('fail:'+JSON.stringify(res));

                         }

                       })

                   },

                   fail: function(err) {

                       console.log(err)

                   }

               })

那在服务器端主要要实现的是prepay_id的获取和签名paySign


       var bookingNo = req.param("bookingNo");

       var total_fee = req.param("total_fee");

       var openid = req.param("openid");

       var body = "费用说明";

       var url = "https://api.mch.weixin.qq.com/pay/unifiedorder";

       var formData = "<xml>";

       formData += "<appid>appid</appid>"; //appid

       formData += "<attach>test</attach>";

       formData += "<body>" + body + "</body>";

       formData += "<mch_id>mch_id</mch_id>"; //商户号

       formData += "<nonce_str>nonce_str</nonce_str>";

       formData += "<notify_url>notify_url</notify_url>";

       formData += "<openid>" + openid + "</openid>";

       formData += "<out_trade_no>" + bookingNo + "</out_trade_no>";

       formData += "<spbill_create_ip>spbill_create_ip</spbill_create_ip>";

       formData += "<total_fee>" + total_fee + "</total_fee>";

       formData += "<trade_type>JSAPI</trade_type>";

       formData += "<sign>" + paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, bookingNo, spbill_create_ip, total_fee, 'JSAPI') + "</sign>";

       formData += "</xml>";

       request({

           url: url,

           method: 'POST',

           body: formData

       }, function(err, response, body) {

           if(!err && response.statusCode == 200) {

               var prepay_id = getXMLNodeValue('prepay_id', body.toString("utf-8"));

               var tmp = prepay_id.split('[');

               var tmp1 = tmp[2].split(']');

               //签名

               var _paySignjs = paysignjs(appid, mch_id, 'prepay_id=' + tmp1[0], 'MD5',timeStamp);

               var o = {

                   prepay_id: tmp1[0],

                   _paySignjs: _paySignjs

               }

               res.send(o);

           }

       });

下面是用到的函数


function paysignjs(appid, nonceStr, package, signType, timeStamp) {

   var ret = {

       appId: appid,

       nonceStr: nonceStr,

       package: package,

       signType: signType,

       timeStamp: timeStamp

   };

   var string = raw1(ret);

   string = string + '&key='+key;

   console.log(string);

   var crypto = require('crypto');

   return crypto.createHash('md5').update(string, 'utf8').digest('hex');

};


function raw1(args) {

   var keys = Object.keys(args);

   keys = keys.sort()

   var newArgs = {};

   keys.forEach(function(key) {

       newArgs[key] = args[key];

   });


   var string = '';

   for(var k in newArgs) {

       string += '&' + k + '=' + newArgs[k];

   }

   string = string.substr(1);

   return string;

};


function paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type) {

   var ret = {

       appid: appid,

       attach: attach,

       body: body,

       mch_id: mch_id,

       nonce_str: nonce_str,

       notify_url: notify_url,

       openid: openid,

       out_trade_no: out_trade_no,

       spbill_create_ip: spbill_create_ip,

       total_fee: total_fee,

       trade_type: trade_type

   };

   var string = raw(ret);

   string = string + '&key='+key;

   var crypto = require('crypto');

   return crypto.createHash('md5').update(string, 'utf8').digest('hex');

};


function raw(args) {

   var keys = Object.keys(args);

   keys = keys.sort()

   var newArgs = {};

   keys.forEach(function(key) {

       newArgs[key.toLowerCase()] = args[key];

   });


   var string = '';

   for(var k in newArgs) {

       string += '&' + k + '=' + newArgs[k];

   }

   string = string.substr(1);

   return string;

};


function getXMLNodeValue(node_name, xml) {

   var tmp = xml.split("<" + node_name + ">");

   var _tmp = tmp[1].split("</" + node_name + ">");

   return _tmp[0];

}

这样简单3步,小程序的微信支付功能就接上了,下面是测试的支付效果图

作者:隔壁陈叔叔

链接:https://www.jianshu.com/p/72f5c1e3f8a5

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Windows server 2012/IIS 8多网站用相同端口部署多张证书(SNI)

安装环境:

1、Windows server 2012/IIS 8

2、服务器本地计算机已经安装两张SSL证书

3、IIS已近架设两个网站,可http访问

安装目的:

在IIS 8上将两张证书,分别绑定在两个不同的网站的默认https端口443上。

安装步骤:

(IIS 8如何安装SSL证书,请参考指南:http://www.wosign.com/Docdownloa ... %8C%87%E5%8D%97.pdf)

1、在第一个网站绑定SSL证书,不要绑定IP地址填写主机名(作为默认的SSL证书,开启SNI需要配置有默认SSL证书),绑定对应域名的证书文件,如下图:

 

2、然后选择第二个网站,绑定对应的SSL证书,这时您就需要填写主机名,同时勾选上“需要服务器名称指示(N)”,选择对应的证书文件,如下图:

 

3、这样就完成了设置,现在我们需要去验证是否达到我们的试验目的,由于没有做dns解析,只好在本地做hosts解析

127.0.0.1 domain1

127.0.0.1 domain2

在浏览器中分别https访问这两个域名,验证效果:

 

从图中,我们可以看到,https访问两个域名(都使用默认的443端口)分别调用到对应的证书文件了。

整个试验大功告成,如果大伙有多个网站,请参考安装步骤第二步继续去绑定后面网站的证书。


http://bbs.wosign.com/thread-3023-1-1.html

Apache, IIS,Tomcat,Nginx设置http跳转到https方法

怎么设置http跳转到https?在为网站部署SSL证书后,可以实现https加密访问,但是网站的用户往往习惯了http访问,这个时候我们就需要设置访问http时自动跳转到https。下面收集了几种常见的服务器环境下设置http跳转到https方法,供大家参考:


1、Apache设置http跳转到https


(1)Apache环境下实现整站http自动跳转到https需在网站的配置文件的标签内,键入以下内容:

(2)如果对某个目录做https强制跳转,则复制以下代码:

(3)如果只需要对某个网页进行https跳转,可以使用redirect 301来做跳转:

redirect 301 /你的网页 https://你的主机+网页

2、IIS设置http跳转到https

IIS版本下,6.0和7.0及以上版本的设置方法有区别,IIS6.0中实现http跳转https方法是修改以下文件:C:\WINDOWS\Help\iisHelp\common\403-4.htm。IIS7.0及以上版本是路径:C:\inetpub\custerr\zh-CN\403.htm,修改的内容如下图:


注意:IIS6中,站点属性-》目录安全性-》编辑中把“要求安全通道(SSL)”勾选上即可。 IIS7、IIS8中,SSL设置>把“要求SSL”勾选即可。




3、Tomcat设置http跳转到https


Tomcat 环境下设置http跳转https需要做两个地方改动:


(1)server.xml 中的端口要改成对应的“443”端口


(2)要在web.xml配置文件中添加节点代码,如下:





4、Nginx设置http跳转到https


Nginx环境下设置http跳转https需在配置80端口的文件里面,写入以下内容即可。


单独页面通用代码段,在需要强制为https的页面上加入该代码进行处理



http://www.wosign.com/faq/faq-http-to-https.htm

如何在同一台服务器上的不同站点使用不同的SSL证书

最近我在和朋友研究网站部署https访问时遇到这样一种场景:我们两人共用一台阿里云的服务器,在这台服务器上分别部署着各自的网站,我们都申请了自己网站域名对应的腾讯云的免费版域名型SSL证书,但在给网站绑定SSL证书时,发现只有一个网站能实现https安全访问,经过一番研究,终于找到了解决方案,为了使跟我们遇到同样问题的朋友们能少走一些弯路,现在我把我使用的方法给大家介绍一下,希望对大家有一些帮助。

经过一番搜索,我们在阿里云的帮助文档中找到了解决方案,阿里云提供了以下解决方案原文请参考这里:


1、将每个https站点绑定到不同的端口。但是这样的话客户端浏览网页时必须手动指定端口,例如 https://site.domain.com:444;

2、为每个站点分配一个独立的ip,这样冲突就解决了,甚至主机头也不用添加了;

3、使用通配证书;

4、升级为IIS8,IIS8中添加的对于SNI(Server Name Indication)的支持,服务器可以从请求中提取出相应的主机头从而找到相应的证书。

方案分析:方案1明显不太现实,我们不能让用户在访问我们的网站时还要指定端口号,一来不太好记,二来用户体验不好;方案2虽然可行,但由于我们使用的是阿里云的服务器,是固定IP,没办法再给服务器再分配一个IP,故该方案不适合我们的场景;方案3虽然可行,但我们使用的是域名型SSL证书,而且要购买通配型SSL证书的话,价格也比较贵,故该方案不适合我们的场景;方案4,我们使用的服务器安装的操作系统是Windows Server 2012R2,而该系统预装的就是IIS8,不是IIS8的可以自行升级为IIS8,在IIS8中,因为添加了对SNI的支持(具体概念及原理,读者可自行查阅相关资料,这里就不多说),所以可以很方便的解决我们所面临的问题。

现在就方案4做一下具体使用说明:

5、安装服务器证书,进入IIS,点击主机名,选择服务器证书,如下图,

这里写图片描述

2.点击右侧导入,如下图,

这里写图片描述

3.选择自己的证书文件,确定即可;

4.给自己的网站绑定相应的SSL证书:从IIS网站中选择自己的网站,右键,编辑绑定,出现下图,

这里写图片描述

5.添加网站绑定,如下图

这里写图片描述

注意:类型选择https,端口号输入443,主机名填写自己的域名,“需要服务器名称只指示”前面的勾选框必须勾选,这个是解决问题的关键,SSL证书选择自己网站的证书(这里的选项是之前导入的证书);

6.确定后,该网站SSL证书绑定成功,可以使用https访问该网站,同样的方式,你需要配置另外一个网站(PS:除过主机名和SSL证书不一样外,其他配置都是一样的);

7.至此,两个网站都已配置成可以使用https访问;

8.测试是否成功:浏览器地址栏输入你要访问的地址:如https://www.domain.com,

如果浏览器中两个网站地址栏呈现类似以下状态,则配置成功:


这里写图片描述


如果一步一步操作到这里,那么恭喜你,你已经解决了这个问题。PS:关于这个问题的解决方案,读者还可参考该网址Host Different SSL’s on one IP with IIS 8 SNI

简洁的ASP可逆加密算法

<%

function jiami(byval s) '加密

randomize

s=escape(s)

for i=1 to len(s)

   k=int(rnd*256)

   jiami=jiami & right("0" & hex(asc(mid(s,i,1)) xor k),2) & right("0" & hex(k),2)

next

end function


function jiemi(byval s) '解密

for i=1 to len(s) step 4

   jiemi=jiemi & chr(int("&H" & mid(s,i,2)) xor int("&H" & mid(s,i+2,2)))

next

jiemi=unescape(jiemi)

end function


s="123百度知道abc"

response.write "要加密的字符串:" & s & ""

s=jiami(s)

response.write "加密后的字符串:" & s & ""

s=jiemi(s)

response.write "解密后的字符串:" & s & ""

%>

jquery ajax POST 例子详解

   function test(){

  $.ajax({

           //提交数据的类型 POST GET

           type:"POST",

           //提交的网址

           url:"testLogin.aspx",

           //提交的数据

           data:{Name:"sanmao",Password:"sanmaoword"},

           //返回数据的格式

           datatype: "html",//"xml", "html", "script", "json", "jsonp", "text".

           //在请求之前调用的函数

           beforeSend:function(){$("#msg").html("logining");},

           //成功返回之后调用的函数            

           success:function(data){

          $("#msg").html(decodeURI(data));            

           }   ,

           //调用执行后调用的函数

           complete: function(XMLHttpRequest, textStatus){

              alert(XMLHttpRequest.responseText);

              alert(textStatus);

               //HideLoading();

           },

           //调用出错执行的函数

           error: function(){

               //请求出错处理

           }        

        });


 }

【jquery】fancybox 是一款优秀的 jquery 弹出层展示插件

今天给大家分享一款优秀的 jquery 弹出层展示插件 fancybox。它除了能够展示图片之外,还可以展示 flash、iframe 内容、html 文本以及 ajax 调用,我们可以通过 css 来自定义外观。


fancybox 特点:

可以支持图片、html 文本、flash 动画、iframe 以及 ajax 的支持;

可以自定义播放器的 css 样式;

可以以组的形式进行播放;

如果将鼠标滚动插件(mouse wheel plugin)包含进来的话 fancybox 还能支持鼠标滚轮滚动来翻阅图片;

fancybox 播放器支持投影,更有立体的感觉。


http://www.cnblogs.com/yjzhu/p/3913054.html


https://www.helloweba.com/view-blog-65.html

做网站经常会用到的一些js效果

1.返回顶部

  $(function(){

       $('.top').hide();

       $(window).scroll(function() {      

            if($(window).scrollTop() >= 100){

               $('.top').fadeIn(300);

                }else{  $('.top').fadeOut(300);  }  

        });

       $('.top').click(function(){$('html,body').animate({scrollTop: '0px'}, 800);});

    });

2.点击锚点移动到对应的位置

  $(".aa").click(function(event){

       event.preventDefault(); //取消事件的默认动作。

       $('html,body').animate({scrollTop:$(this.hash).offset().top},800);

  });

3.判断页面加载是否完成

  document.onreadystatechange = loadingChange;//当页面加载状态改变的时候执行这个方法.  

       function loadingChange() {  

           if(document.readyState == "complete"){ //当页面加载状态为完全结束时进入  

               $(".loading").hide();//当页面加载完成后将loading页隐藏  

               window.location.href="http://www.baidu.com";

           }  

       }

4.禁止鼠标右键

  $(document).ready(function(){

       $(document).on("contextmenu",function(e){

            return false;

        });

   });

5.判断是pc端还是移动端

   function getClientInfo(){  

        var banner=document.getElementById('banner');

        var userAgentInfo = navigator.userAgent;  

        var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");  

        var agentinfo = null;  

        for (var i = 0; i < Agents.length; i++) {  

                  if (userAgentInfo.indexOf(Agents[i]) > 0) { agentinfo = userAgentInfo; break; }  

        }  

        if(agentinfo){

                  $('.banner').css('height','auto');

                   banner.style.height='auto'

                  }else{

                       $('.banner').css($(window).height());

                       banner.style.height=document.body.clientHeight

                  }    

       }

6.判断是否是ie浏览器

  function isIE() { //ie?    

      if (!!window.ActiveXObject || "ActiveXObject" in window){

             return true;

        }else{}        

         return false;  

    }

7、返回上一页

    方法一、以按钮点击的方式实现:

                  <input type="button" name="Submit" value="返回上一页" onclick="javascript:window.history.back(-1);">

                  或者

                  <input type="button" name="Submit" value="返回上一页" onclick="javascript:history.back(-1);">

    方法二、以图片点击的方式实现:

                  <img src="图片的路径" onclick="javascript:window.history.back(-1);" title="返回上一页" alt="返回点击图片" />

                  或者

                  <img src="图片的路径" onclick="javascript:history.back(-1);" title="返回上一页" alt="返回点击图片" />

    方法三、文字点击的方式实现:

                  <a href="javascript:history.back(-1)">返回上一页</a>

                 或者

                 <a href="#" onClick="javascript:history.back(-1);">返回上一页</a>


    方法四、图片链接的方式实现:

                 <a href="javascript:window.history.back(-1)" target="_self"><img src="图片的路径" /></a>

                 或者

                <a href="javascript:history.back(-1)" target="_self"><img src="图片的路径" /></a>

    方法五、过几秒钟后返回上一页代码:

                <script language="javascript">setTimeout("window.history.go(-1)",3000)</script>

                或者

               <script language="javascript">setTimeout("history.go(-1)",3000)</script>

如何给ACCESS 表中字段设置默认值

用JET SQL 可以实现,语法结构: ALTER TABLE TABLENAME ALTER COLUMN FIELDNAME TEXT(40) DEFAULT 默认值  但是要注意,上述语句要用 ADODB.CONNECTION.EXECUTE 等方法来执行,直接用上述代码建立一个查询无法保存或者运行,会得到 ACCESS 的错误提示。 或者引用DAO或ADOX,你想怎么设就怎么设,功能很全面,Access的帮助中有详细的英文使用说明。

asp eval动态变量赋值

Dim audio_lang

Dim tempStr:tempStr="audio"

execute(tempStr&"_lang"&"="&"""这是一个测试""")

response.Write audio_lang

Access中创建一个查询,查找"身份证"字段第4位至第6位值为"102"的纪录

用SQL语言表述则如下:


SELECT *FROM 表5 WHERE Mid([身份证],4,3)='102';

js原生态某手机购买网站上多条件无刷新筛选显示不同价格


<!DOCTYPE HTML>

<html>

<head>

<title>please enter your title</title>

<meta charset="utf-8">

<meta name="Author" content="苏淮">

<style type='text/css'>

*{ margin:0; padding:0;}


#wrap{

width:600px;

height:400px;

margin:50px auto;

}

#top{

width:600px;

height:220px;

border-bottom:1px solid #bbb;

font-family:'Microsoft yahei';

}

#top p{

margin-bottom:15px;

}

#top p font{

font-size:14px;

color:#000;

margin-right:15px;

}

#top p span{

font-size:14px;

color:#666;

border:1px solid #999;

display:inline-block;

padding:8px;

cursor:pointer;

}

#top p span.on{

border:2px solid #f60;

padding:7px;

background:url(img/on.png) no-repeat right bottom;

}

#bottom{

width:600px;

height:159px;

padding-top:20px;

font-family:'Microsoft yahei';

}

#bottom p font{

color:#f60;

font-size:20px;

margin-right:20px;

}

#bottom p a{

font-size:14px;

color:blue;

}

#bottom p a i{

margin:0 5px;

color:#90c;

}

#bottom button{

width:330px;

height:50px;

font-family:'Microsoft yahei';

margin-top:20px;

font-size:20px;

background:#f60;

color:#fff;

border:none;


}

</style>


</head>

<body>


<div id="wrap">

<div id="top">

<p id='model'>

<font>型号</font>

<span>4.7英寸</span>

<span>5.5英寸</span>

</p>

<p id='color'>

<font>颜色</font>

<span>银色</span>

<span>金色</span>

<span>深空灰色</span>

</p>

<p id='rom'>

<font>内存</font>

<span>16GB</span>

<span>64GB</span>

<span>128GB</span>

</p>

<p id='banben'>

<font>版本</font>

<span>公开版</span>

<span>移动赠费版</span>

<span>联通合约版</span>

</p>

</div>

<div id="bottom">

<p>价格: <font>¥ <span id='price'>5288</span>.00</font> <a href=''><i>移动赠费版</i>或<i>联通合约版</i>购机价格计算请点击这里>.< </a></p>

<button>立即购买</button>

</div>

</div>


<script type="text/javascript">


var mSpan = document.getElementById('model').getElementsByTagName('span');

var cSpan = document.getElementById('color').getElementsByTagName('span');

var rSpan = document.getElementById('rom').getElementsByTagName('span');

var bSpan = document.getElementById('banben').getElementsByTagName('span');

var aSpan = document.getElementsByTagName('span');

var oModel = document.getElementById('model');

var oRom = document.getElementById('rom');

var oPrice = document.getElementById('price');


mSpan[0].className = 'on';

cSpan[0].className = 'on';

rSpan[0].className = 'on';

bSpan[0].className = 'on';


for (var i=0;i<aSpan.length;i++ )

{


aSpan[i].onclick = function(){

var siblings = this.parentNode.children;

for (var j=0;j<siblings.length;j++ )

{

siblings[j].className = '';

}

this.className = 'on';


if ( this.parentNode == oModel || this.parentNode == oRom )

{

price();

}

};

};


function price(){

var p1 = 0;

var p2 = 0;

for (var i=0;i<mSpan.length;i++ )

{

if ( mSpan[i].className == 'on' )

{

p1 = i?6088:5288;

break;

};

};

for (var i=0;i<rSpan.length;i++ )

{

if ( rSpan[i].className == 'on' )

{

switch ( i )

{

case 0:

p2 = 0;

break;

case 1:

p2 = 800;

break;

case 2:

p2 = 1600;

break;

}

}

};

oPrice.innerHTML = p1+p2;

};




</script>

</body>

</html>


http://www.daimabiji.com/articleform/172.html

js点击标签在指定输入框内输出指定内容

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>js点击标签在指定输入框内输出指定内容 - 代码笔记 www.daimabiji.com</title>

<style>

.c{ width:100px; height:25px; line-height:25px; text-align:center; border:1px solid #eee; margin:5px; float:left; font-size:12px; cursor:pointer}

.lanrenzhijia{ width:800px; height:auto; margin:0 auto;}

</style>

</head>


<body>

<div class="lanrenzhijia">

<div class="c" id="c0">菜单导航</div>

<div class="c" id="c1">时间日期</div>

<div class="c" id="c2">焦点图</div>

<div class="c" id="c3">tab标签</div>

<div class="c" id="c4">jquery特效</div>

<div class="c" id="c5">在线客服</div>

<div class="c" id="c6">代码笔记</div>

<input id="i" type="text" style="width:720px; height:25px; border:1px solid #ccc"/>

</div>

<script>

var x=["菜单导航","时间日期","焦点图","tab标签","jquery特效","在线客服","代码笔记点击后放入输入框的内容"];

var y=[];

function $(id){

return document.getElementById(id)

};

for(var i=0,m=x.length;i<m;i++){

$("c"+i).onclick=(function(i){

return function(){

var s=y.join(",").indexOf(x[i]);

if(s>=0){

for(var r in y){

if(y[r]==x[i]){y.splice(r,1)}

}

}

else{

y.push(x[i])

}

$("i").value=y.join(" ");

}

})

(i)

}

</script>

<div style="text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';">

<p>适用浏览器:IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗.</p>

<p>来源:<a href="http://www.daimabiji.com/" target="_blank">代码笔记 www.daimabiji.com</a></p>

</div>

</body>

</html>


IIS6下安装阿里云免费SSL证书

安装证书

IIS 6 支持PFX格式证书,下载包中包含PFX格式证书和密码文件。以沃通证书为例:
文件说明:
1. 证书文件214332594140170.pem,包含两段内容,请不要删除任何一段内容。
2. 如果是证书系统创建的CSR,还包含:证书私钥文件214332594140170.key、PFX格式证书文件214332594140170.pfx、PFX格式证书密码文件pfx-password.txt。
( 1 ) 证书导入

• 开始 -〉运行 -〉MMC;

• 启动控制台程序,选择菜单“文件"中的"添加/删除管理单元”-> “添加”,从“可用的独立管理单元”列表中选择“证书”-> 选择“计算机帐户”;

• 在控制台的左侧显示证书树形列表,选择“个人”->“证书”,右键单击,选择“所有任务"-〉"导入”, 根据"证书导入向导”的提示,导入PFX文件(此过程当中有一步非常重要: “根据证书内容自动选择存储区”)。

• 安装过程当中需要输入密码为您当时设置的密码。导入成功后,可以看到如图所示的证书信息。

.

( 2 ) 分配服务器证书,如图所示流程。

用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS

HTTP 协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的 HTTP 的网站是不太安全的。所以, Google 的 Chrome 浏览器将在 2017 年 1 月开始,标记使用不加密的 HTTP 协议的网站为 Not Secure,不安全。

现在你要做的就是让网站支持 HTTPS,并不难,而且现在可以免费做到。要使用 HTTPS,你需要安全机构颁发的安全证书,然后配置服务器,去使用这个证书。下面介绍一下在阿里云免费申请安全证书,还有配置一般的 NGINX 服务器支持 HTTPS 的方法。


申请证书


登录:阿里云控制台,产品与服务,证书服务,购买证书。

购买:证书类型选择 免费型DV SSL,然后完成购买。

补全:在 我的证书 控制台,找到购买的证书,在操作栏里选择 补全。填写证书相关信息。

域名验证:可以选择 DNS,如果域名用了阿里云的 DNS 服务,再勾选一下 证书绑定的域名在 阿里云的云解析。

上传:系统生成 CSR,点一下 创建。

提交审核。

如果一切正常,10 分钟左右,申请的证书就会审核通过。

申请证书要注意的是验证域名,就是你要验证你想绑定证书的域名是你自己的,如果选择使用 DNS 验证,你需要在域名的管理里,添加一条特定的 DNS 记录,这样就可以证名这个域名是你自己的。使用了阿里云的云解析服务,这个步骤可以自动完成,会自动为你添加一条 DNS 验证的记录。


输入证书要绑定的域名:

ASP微信支付之扫码支付

一、前提:

1、需要是正规公司;

2、网站不能只是虚拟主机,至少要VPS、云服务器,可以登录服务器管理设置;

3、具备一定熟练程序的ASP编程、IIS配置、调试经验;

4、有足够的耐心和细心,因为这个过程耗时很久、很烦琐,需要做的事情非常多。

二、准备工作:

微信支付在用户开发文档、帮忙文档方面做得不够好,这里一点、那儿一点,让你猜、让你试、让你疯,你需要阅读大量文档、动手实验后才能拼促一个大概的思路,这一点比支付宝差,没有商家服务电话,连常见问题解答也是少得可怜。而如果微信能拿出小米写PPT的功力的百分之一将开发流程列出来,对于开发者来说这个事情就会变得非常简单的。不知道会不会有些用户因为接入微信支付实在太复杂了而放弃了。

写这个的目的就要是为了方便需要的用户少走弯路,但由于时间太久,只能记往以下是大致的流程,

1、免费申请微信公众号“服务号”;通过后,您会获得一个公众号的APPID,这个在后续程序中要用到。

2、花300元/年做微信认证;

3、等微信认证后,申请开通微信支付

4、开通微信支付后,在微信支付开发配置中设置“支付授权目录”、“测试授权目录”、“支付回调URL”

微信支付的程序文件需要3个:

(1)生成二唯码供用户扫描的网页;

(2)支付回调URL,就是当用户扫描二唯码后,微信会调用这个回调用URL;

(3)微信支付异步通知回调地址,当用户在微信上确认支付后,接收微信支付异步通知;

其中第(2)、(3)个文件需要在支付授权的目录下。第(1)的文件不在支付授权目录下也没有影响。

5、微信支付商户资料审核后,会发一封邮件到申请微信支付的邮箱,根据邮件提示,登录商户平台,进行以下操作:

微信支付商户审核通过后,您会获得微信支付商户号 mch_id,这个在后续程序中要用到。

以下操作要在“微信商户平台”上操作,而不是微信公众平台。

(1)验证帐户,微信会往你的对公帐户打入一笔“巨款”,在验证中填写收到款项正确数字。

(2)在“账户设置”中的“API安全”中设置API密钥;API密钥这个就是在后续程序中要用到的key。

(3)在“账户设置”中的“API安全”中下载微信支付API证书;这个证书及证书密码在后续的服务器上配置需要用到。

6、将第5步的(3)中的微信支付证书传到网站服务器上指定一个目录,并解压,解压出来后有微信支付API证书共四份(证书pkcs12格式、证书pem格式、证书密钥pem格式、CA证书),接下来的操作需要在服务器上进行操作,可通过远程桌面连接方式连到服务器上操作:

(1)将证书文件所在的目录的安全中添加everyone用户权限;

(2)运行命令MMC,打开“控制台”,在“文件”->“添加/删除管理单元”,添加“证书”->“我的用户帐户”,再添加“证书”->“计算机帐户”,如下图:

然后:

[A]在“控制台根节点” -> “证书 - 当前用户” -> “个人” ->“证书”上右键点击选择“导入”证书,然后根据提示导入到之前从微信商户平台上下载的证书文件。

[B]在“控制台根节点” -> “证书 - 当前用户” -> “中级证书颁发机构” ->“证书”上右键点击选择“导入”证书,然后根据提示导入到之前从微信商户平台上下载的证书文件。

[C]在“控制台根节点” -> “证书(本地计算机)” -> “个人” ->“证书”上右键点击选择“导入”证书,然后根据提示导入到之前从微信商户平台上下载的证书文件。

[D]在“控制台根节点” -> “证书(本地计算机)” -> “中级证书颁发机构” ->“证书”上右键点击选择“导入”证书,然后根据提示导入到之前从微信商户平台上下载的证书文件。

(3)到微软网站上下载并安装winhttpcertcfg.exe文件,下载链接:http://www.microsoft.com/en-us/download/details.aspx?id=19801

(4)安装winhttpcertcfg.exe后,找到其安装目录,一般是:C:\Program Files (x86)\Windows Resource Kits\Tools,将winhttpcertcfg.exe拷贝一份到证书文件所在的目录中;

(5)运行CMD命令行后,在命令行中转到证书所在的目录,然后运行:

winhttpcertcfg -g -i "apiclient_cert.p12" -c LOCAL_MACHINE\My -a "Network Service" -p password

winhttpcertcfg -g -c LOCAL_MACHINE\My -s "MMPay" -a "Network Service"

winhttpcertcfg -g -c LOCAL_MACHINE\My -s "MMPay" -a "EveryOne"

备注说明:以上命令行中的第1行中password为你的证书密码,密码一般设置为商户号;第2、3行中的MMPay为证书名称

提醒:以上命令行中的减号,双引号都为英文半角状态,如果您发现直接复制以上命令运行后,提示的是使用方法,那么说明复制的不行,请手动输入。为了方便您复制,代码形式的再补充一份:

winhttpcertcfg -g -i "apiclient_cert.p12" -c LOCAL_MACHINE\My -a "Network Service" -p password  

winhttpcertcfg -g -c LOCAL_MACHINE\My -s "MMPay" -a "Network Service"  

winhttpcertcfg -g -c LOCAL_MACHINE\My -s "MMPay" -a "EveryOne"

到此为止,准备工作应该是差不多了,由于时间较久,以上都是凭记忆写的,没有再次验主,如果漏掉了请见谅!

三、写微信支付程序:

微信的程序编码都需要用UTF-8,如果网站原来用GBK、GB2312的也没关系,只要在涉及微信支付程序的文件头中加入编码申请即可,另外,网页文件也要以UTF-8编码存储,验证方法:用记事本打开网页文件,然后选择另存为,在弹出的框中编码一栏如果显示的是UTF-8,则表明该网页文件已经是以UTF-8编码存储的。

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>  

<%Session.CodePage=65001%>  

<%Response.Charset = "utf-8"%>  

<%Response.CodePage=65001%>

1、MD5,微信签名算法中需要用到

网络上有各种MD5,但在微信支付中有汉字时就不能用了,以下这款可用,复制后到记事本中存为MD5.asp文件,存的时候要记得选择UTF-8编码格式:

<%Private Const BITS_TO_A_BYTE = 8  

Private Const BYTES_TO_A_WORD = 4  

Private Const BITS_TO_A_WORD = 32  

Private m_lOnBits(30)  

Private m_l2Power(30)  

Private Function LShift(lValue, iShiftBits)  

   If iShiftBits = 0 Then  

       LShift = lValue  

       Exit Function  

   ElseIf iShiftBits = 31 Then  

       If lValue And 1 Then  

           LShift = &H80000000  

       Else  

           LShift = 0  

       End If  

       Exit Function  

   ElseIf iShiftBits < 0 Or iShiftBits > 31 Then  

       Err.Raise 6  

   End If  

   If (lValue And m_l2Power(31 - iShiftBits)) Then  

       LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000  

   Else  

       LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))  

   End If  

End Function  

Private Function str2binold(varstr)  

    str2bin=""  

    For i = 1 To Len(varstr)  

        varchar=mid(varstr,i,1)  

        varasc = Asc(varchar)  

        If varasc < 0 Then  

           varasc = varasc + 65535  

        End If  

        If varasc > 255 Then  

           varlow = Left(Hex(Asc(varchar)),2)  

           varhigh = right(Hex(Asc(varchar)),2)  

           str2bin = str2bin & chrB("&H" & varlow) & chrB("&H" & varhigh)  

        Else  

           str2bin = str2bin & chrB(AscB(varchar))  

        End If  

    Next  

End Function  

Private Function str2bin(varstr)  

   Dim varchar, code, codearr, j  

   str2bin = ""  

   For i=1 To Len(varstr)  

       varchar = Mid(varstr,i,1)  

       code = Server.UrlEncode(varchar)  

       If Len(code) = 1 Then  

          str2bin = str2bin & chrB(AscB(code))  

       Else  

          codearr = Split(code,"%")  

          For j = 1 to UBound(codearr)  

             str2bin = str2bin & ChrB("&H" & codearr(j))  

          Next  

        End If  

   Next  

End Function  

Private Function RShift(lValue, iShiftBits)  

   If iShiftBits = 0 Then  

       RShift = lValue  

       Exit Function  

   ElseIf iShiftBits = 31 Then  

       If lValue And &H80000000 Then  

           RShift = 1  

       Else  

           RShift = 0  

       End If  

       Exit Function  

   ElseIf iShiftBits < 0 Or iShiftBits > 31 Then  

       Err.Raise 6  

   End If  

   RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)  

   If (lValue And &H80000000) Then  

       RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))  

   End If  

End Function  

Private Function RotateLeft(lValue, iShiftBits)  

   RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))  

End Function  

Private Function AddUnsigned(lX, lY)  

   Dim lX4  

   Dim lY4  

   Dim lX8  

   Dim lY8  

   Dim lResult  

   lX8 = lX And &H80000000  

   lY8 = lY And &H80000000  

   lX4 = lX And &H40000000  

   lY4 = lY And &H40000000  

   lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)  

   If lX4 And lY4 Then  

       lResult = lResult Xor &H80000000 Xor lX8 Xor lY8  

   ElseIf lX4 Or lY4 Then  

       If lResult And &H40000000 Then  

           lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8  

       Else  

           lResult = lResult Xor &H40000000 Xor lX8 Xor lY8  

       End If  

   Else  

       lResult = lResult Xor lX8 Xor lY8  

   End If  

   AddUnsigned = lResult  

End Function  

Private Function md5_F(x, y, z)  

   md5_F = (x And y) Or ((Not x) And z)  

End Function  

Private Function md5_G(x, y, z)  

   md5_G = (x And z) Or (y And (Not z))  

End Function  

Private Function md5_H(x, y, z)  

   md5_H = (x Xor y Xor z)  

End Function  

Private Function md5_I(x, y, z)  

   md5_I = (y Xor (x Or (Not z)))  

End Function  

Private Sub md5_FF(a, b, c, d, x, s, ac)  

   a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))  

   a = RotateLeft(a, s)  

   a = AddUnsigned(a, b)  

End Sub  

Private Sub md5_GG(a, b, c, d, x, s, ac)  

   a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))  

   a = RotateLeft(a, s)  

   a = AddUnsigned(a, b)  

End Sub  

Private Sub md5_HH(a, b, c, d, x, s, ac)  

   a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac))  

   a = RotateLeft(a, s)  

   a = AddUnsigned(a, b)  

End Sub  

Private Sub md5_II(a, b, c, d, x, s, ac)  

   a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac))  

   a = RotateLeft(a, s)  

   a = AddUnsigned(a, b)  

End Sub  

Private Function ConvertToWordArray(sMessage)  

   Dim lMessageLength  

   Dim lNumberOfWords  

   Dim lWordArray()  

   Dim lBytePosition  

   Dim lByteCount  

   Dim lWordCount  

   Const MODULUS_BITS = 512  

   Const CONGRUENT_BITS = 448  

   lMessageLength = LenB(sMessage)  

   lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)  

   ReDim lWordArray(lNumberOfWords - 1)  

   lBytePosition = 0  

   lByteCount = 0  

   Do Until lByteCount >= lMessageLength  

       lWordCount = lByteCount \ BYTES_TO_A_WORD  

       lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE  

       lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(AscB(MidB(sMessage, lByteCount + 1, 1)), lBytePosition)  

       lByteCount = lByteCount + 1  

   Loop  

   lWordCount = lByteCount \ BYTES_TO_A_WORD  

   lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE  

   lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)  

   lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)  

   lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)  

   ConvertToWordArray = lWordArray  

End Function  

Private Function WordToHex(lValue)  

   Dim lByte  

   Dim lCount  

   For lCount = 0 To 3  

       lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)  

       WordToHex = WordToHex & Right("0" & Hex(lByte), 2)  

   Next  

End Function  

Public Function MD5(sMessage)  

   m_lOnBits(0) = CLng(1)  

   m_lOnBits(1) = CLng(3)  

   m_lOnBits(2) = CLng(7)  

   m_lOnBits(3) = CLng(15)  

   m_lOnBits(4) = CLng(31)  

   m_lOnBits(5) = CLng(63)  

   m_lOnBits(6) = CLng(127)  

   m_lOnBits(7) = CLng(255)  

   m_lOnBits(8) = CLng(511)  

   m_lOnBits(9) = CLng(1023)  

   m_lOnBits(10) = CLng(2047)  

   m_lOnBits(11) = CLng(4095)  

   m_lOnBits(12) = CLng(8191)  

   m_lOnBits(13) = CLng(16383)  

   m_lOnBits(14) = CLng(32767)  

   m_lOnBits(15) = CLng(65535)  

   m_lOnBits(16) = CLng(131071)  

   m_lOnBits(17) = CLng(262143)  

   m_lOnBits(18) = CLng(524287)  

   m_lOnBits(19) = CLng(1048575)  

   m_lOnBits(20) = CLng(2097151)  

   m_lOnBits(21) = CLng(4194303)  

   m_lOnBits(22) = CLng(8388607)  

   m_lOnBits(23) = CLng(16777215)  

   m_lOnBits(24) = CLng(33554431)  

   m_lOnBits(25) = CLng(67108863)  

   m_lOnBits(26) = CLng(134217727)  

   m_lOnBits(27) = CLng(268435455)  

   m_lOnBits(28) = CLng(536870911)  

   m_lOnBits(29) = CLng(1073741823)  

   m_lOnBits(30) = CLng(2147483647)  

   m_l2Power(0) = CLng(1)  

   m_l2Power(1) = CLng(2)  

   m_l2Power(2) = CLng(4)  

   m_l2Power(3) = CLng(8)  

   m_l2Power(4) = CLng(16)  

   m_l2Power(5) = CLng(32)  

   m_l2Power(6) = CLng(64)  

   m_l2Power(7) = CLng(128)  

   m_l2Power(8) = CLng(256)  

   m_l2Power(9) = CLng(512)  

   m_l2Power(10) = CLng(1024)  

   m_l2Power(11) = CLng(2048)  

   m_l2Power(12) = CLng(4096)  

   m_l2Power(13) = CLng(8192)  

   m_l2Power(14) = CLng(16384)  

   m_l2Power(15) = CLng(32768)  

   m_l2Power(16) = CLng(65536)  

   m_l2Power(17) = CLng(131072)  

   m_l2Power(18) = CLng(262144)  

   m_l2Power(19) = CLng(524288)  

   m_l2Power(20) = CLng(1048576)  

   m_l2Power(21) = CLng(2097152)  

   m_l2Power(22) = CLng(4194304)  

   m_l2Power(23) = CLng(8388608)  

   m_l2Power(24) = CLng(16777216)  

   m_l2Power(25) = CLng(33554432)  

   m_l2Power(26) = CLng(67108864)  

   m_l2Power(27) = CLng(134217728)  

   m_l2Power(28) = CLng(268435456)  

   m_l2Power(29) = CLng(536870912)  

   m_l2Power(30) = CLng(1073741824)  

   Dim x  

   Dim k  

   Dim AA  

   Dim BB  

   Dim CC  

   Dim DD  

   Dim a  

   Dim b  

   Dim c  

   Dim d  

   Const S11 = 7  

   Const S12 = 12  

   Const S13 = 17  

   Const S14 = 22  

   Const S21 = 5  

   Const S22 = 9  

   Const S23 = 14  

   Const S24 = 20  

   Const S31 = 4  

   Const S32 = 11  

   Const S33 = 16  

   Const S34 = 23  

   Const S41 = 6  

   Const S42 = 10  

   Const S43 = 15  

   Const S44 = 21  

   x = ConvertToWordArray(str2bin(sMessage))  

   a = &H67452301  

   b = &HEFCDAB89  

   c = &H98BADCFE  

   d = &H10325476  

   For k = 0 To UBound(x) Step 16  

       AA = a  

       BB = b  

       CC = c  

       DD = d  

       md5_FF a, b, c, d, x(k + 0), S11, &HD76AA478  

       md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756  

       md5_FF c, d, a, b, x(k + 2), S13, &H242070DB  

       md5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE  

       md5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF  

       md5_FF d, a, b, c, x(k + 5), S12, &H4787C62A  

       md5_FF c, d, a, b, x(k + 6), S13, &HA8304613  

       md5_FF b, c, d, a, x(k + 7), S14, &HFD469501  

       md5_FF a, b, c, d, x(k + 8), S11, &H698098D8  

       md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF  

       md5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1  

       md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE  

       md5_FF a, b, c, d, x(k + 12), S11, &H6B901122  

       md5_FF d, a, b, c, x(k + 13), S12, &HFD987193  

       md5_FF c, d, a, b, x(k + 14), S13, &HA679438E  

       md5_FF b, c, d, a, x(k + 15), S14, &H49B40821  

       md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562  

       md5_GG d, a, b, c, x(k + 6), S22, &HC040B340  

       md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51  

       md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA  

       md5_GG a, b, c, d, x(k + 5), S21, &HD62F105D  

       md5_GG d, a, b, c, x(k + 10), S22, &H2441453  

       md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681  

       md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8  

       md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6  

       md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6  

       md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87  

       md5_GG b, c, d, a, x(k + 8), S24, &H455A14ED  

       md5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905  

       md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8  

       md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9  

       md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A  

       md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942  

       md5_HH d, a, b, c, x(k + 8), S32, &H8771F681  

       md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122  

       md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C  

       md5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44  

       md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9  

       md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60  

       md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70  

       md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6  

       md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA  

       md5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085  

       md5_HH b, c, d, a, x(k + 6), S34, &H4881D05  

       md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039  

       md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5  

       md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8  

       md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665  

       md5_II a, b, c, d, x(k + 0), S41, &HF4292244  

       md5_II d, a, b, c, x(k + 7), S42, &H432AFF97  

       md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7  

       md5_II b, c, d, a, x(k + 5), S44, &HFC93A039  

       md5_II a, b, c, d, x(k + 12), S41, &H655B59C3  

       md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92  

       md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D  

       md5_II b, c, d, a, x(k + 1), S44, &H85845DD1  

       md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F  

       md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0  

       md5_II c, d, a, b, x(k + 6), S43, &HA3014314  

       md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1  

       md5_II a, b, c, d, x(k + 4), S41, &HF7537E82  

       md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235  

       md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB  

       md5_II b, c, d, a, x(k + 9), S44, &HEB86D391  

       a = AddUnsigned(a, AA)  

       b = AddUnsigned(b, BB)  

       c = AddUnsigned(c, CC)  

       d = AddUnsigned(d, DD)  

   Next  

   MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))  

End Function%>

2、二维码生成程序:

(1)jQuery.min.js 网络上可下载

(2)jquery.qrcode-0.8.0.min.js,网络上可下载

(3)二维码生成:WxQCode.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>  

<%Session.CodePage=65001%>  

<%Response.Charset = "utf-8"%>  

<%Response.CodePage=65001%>  

<%Response.Buffer =True  

Response.ExpiresAbsolute =Now() - 1  

Response.Expires=0  

Response.CacheControl="no-cache"%><!DOCTYPE html>  

<html>  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">  

<title>微信支付 - 扫码支付</title>  

<script type="text/javascript" src="jquery.min.js"></script>  

<script type="text/javascript" src="jquery.qrcode-0.8.0.min.js"></script>  

<style type="text/css">  

body {  

   font-family: Arial;  

   margin: 0 auto;  

   padding: 0;  

   text-align: center;  

}  

#container {  

   display: inline-block;  

   margin: 20px auto;  

   box-shadow: 0 0 16px rgba(0,0,0,0.5);  

   filter: progid:DXImageTransform.Microsoft.Shadow(color='#969696', Direction=135, Strength=5);  

   -moz-box-shadow:0px 0px 16px rgba(0,0,0,0.5);   /*firefox*/  

   -webkit-box-shadow:0px 0px 16px rgba(0,0,0,0.5);    /*webkit*/  

}  

 

#container > * {  

   display: block;  

}  

#img-buffer {display: none;}  

#PayTitle{width:400px; float:center; text-align: center;font-size:14pt;font-family:"微软雅黑","仿宋","宋体",Arial;line-height:180%;color:#0000ff}  

</style>  

</head>  

<body>  

<!--#include file="md5.asp" -->  

<%Dim appid, mch_id, product_id, time_stamp, nonce_str, key  

appid = "wx1234567890123456"                    '公众号的APPID,替换成您的APPID  

mch_id = "1234567890"                           '微信支付商户号,替换成您的商户号  

key = "12345678901234567890123456789012"        '32位API密钥,替换成您的API密钥  

 

'生成product_id,您可根据您网站的需要生成,或者调用您网站的订单生成这个product_id  

Dim ShiJian, DingDan  

ShiJian = now()  

DingDan = year(shijian) & right("0" & month(shijian), 2) & right("0" & day(shijian), 2) & right("0" & hour(shijian), 2) & right("0" & minute(shijian), 2) & right("0" & second(shijian), 2)  

product_id = DingDan  

 

'时间戳  

time_stamp = DateDiff("s", "1970-1-1 00:00:00", Now())  

 

'随机字符串  

randomize timer  

Dim rdCode  

rdCode = Int((32767)*Rnd +1000)  

nonce_str = MD5(rdCode)  

 

'签名  

Dim stringA  

stringA = "appid=" & appid & "&mch_id=" & mch_id & "&nonce_str=" & nonce_str & "&product_id=" & product_id & "&time_stamp=" & time_stamp  

 

Dim stringSignTemp  

stringSignTemp = stringA & "&key=" & key  

     

sign = UCase(MD5(stringSignTemp))  

 

'二维码链接  

Dim long_url  

long_url = "weixin://wxpay/bizpayurl?sign=" & sign & "&" &  stringA  

 

'生成短网址二维码链接  

Dim short_Url, shortUrl, UrlStr  

shortUrl = "https://api.mch.weixin.qq.com/tools/shorturl"  

 

rdCode = Int((32767)*Rnd +1000)  

nonce_str = MD5(rdCode)  

 

stringA = "appid=" & appid & "&long_url=" & long_url & "&mch_id=" & mch_id & "&nonce_str=" & nonce_str  

stringSignTemp = stringA & "&key=" & key  

 

sign = UCase(MD5(stringSignTemp))  

 

Dim orderStr, ReturnStr  

orderStr = "<xml>" & _  

"<appid>" & appid & "</appid>" & _  

"<long_url><![CDATA[" & long_url & "]]></long_url>" & _  

"<mch_id>" & mch_id & "</mch_id>" & _  

"<nonce_str>" & nonce_str & "</nonce_str>" & _  

"<sign>" & sign & "</sign>" & _  

"</xml>"  

 

ReturnStr =  PostXML(shortUrl, orderStr)  

 

'识别微信消息  

Dim objXml, xmlDoc  

Set objXml = Server.CreateObject("Microsoft.XMLDOM")  

objXml.preserveWhiteSpace = true  

objXml.async = false  

 

'加载微信字符串  

Dim WeiXinStr  

WeiXinStr = ReturnStr  

objXml.loadXML(WeiXinStr)  

Set xmlDoc = objXml.documentElement  

 

Dim NodesLength  

NodesLength = xmlDoc.childNodes.length  

 

Dim i, return_code, return_msg, result_code, err_code  

For i= 0 to NodesLength-1  

   If "#text" <> xmlDoc.childNodes(i).nodeName Then  

       Execute(xmlDoc.childNodes(i).nodeName & "=""" & Replace(Replace(xmlDoc.childNodes(i).text, """", ""), "'", "") & """")  

   End If  

Next  

If result_code = "SUCCESS" Then  

   UrlStr = short_url  

Else  

   UrlStr = long_url  

End If  

 

Function PostXML(pUrl, pXml)  

   PostXML = ""  

   Dim https, ResponseBody  

   Set https = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")  

   https.setOption(3) = "LOCAL_MACHINE\My\MMPay"  

     

   Dim xmlDoc  

   Set xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0")  

   xmlDoc.async = false  

   xmlDoc.loadXML pXml  

     

   With https  

       .Open "Post", pUrl, False  

       .setRequestHeader "Content-Type","application/xml;charset=UTF-8"  

       .Send xmlDoc    'pXml  

       PostXML = .ResponseText  

   End With  

   Set https = Nothing  

End Function%>  

<div align="center"><div id="PayTitle"><p>请打开手机微信的“扫一扫”功能</p><p>扫描以下二唯码进行支付</p></div>  

<div id="container"></div><script type="text/javascript">  

(function ($) {  

   'use strict';  

   var updateQrCode = function ()  

   {  

       var options =  

       {  

           render: 'canvas',  

           minVersion: 3,  

           maxVersion: 40,  

           ecLevel: 'H',  

           left: 0,  

           top: 0,  

           size: 220,  

           fill: '#000',  

           background: '#FFF',  

           text: '<%=UrlStr%>',  

           radius: 0.2,  

           quiet: 1,  

           mode: 4,  

           mSize: 0.1,  

           mPosX: 0.5,  

           mPosY: 0.5,  

           label: '微信支付',  

           fontname: '微软雅黑',  

           fontcolor: '#FF9818',   //'#60BAE6',  

           image: $("#img-buffer")[0]  

       };  

       $("#container").empty().qrcode(options);  

   },  

   update = function ()  

   {  

       updateQrCode();  

   };  

   $(function ()  

   {  

       $(window).load(update);  

       update();  

   });  

}(jQuery));  

</script>  

</div>  

</body>  

</html>

3、回调URL程序:Wx_Return.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>  

<%Session.CodePage=65001%>  

<%Response.Charset = "utf-8"%>  

<%Response.CodePage=65001%>  

<!--#include file="md5.asp" -->  

<%Dim WxUrl  

WxUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder"  

 

'获取微信消息内容  

Dim xmlCount, xmlRequest, xmlResult  

xmlCount = Request.TotalBytes  

If xmlCount>0 Then  

   xmlRequest = Request.BinaryRead(xmlCount)  

   xmlResult = Bytes2bStr(xmlRequest, "utf-8")  

Else  

   Response.End      

End If  

 

'识别微信消息  

Dim objXml, xmlDoc  

Set objXml = Server.CreateObject("Microsoft.XMLDOM")  

'Set objXml = Server.CreateObject("MSXML2.DOMDocument")  

objXml.preserveWhiteSpace = true  

objXml.async = false  

 

'加载微信字符串  

Dim WeiXinStr  

WeiXinStr = xmlResult  

objXml.loadXML(WeiXinStr)  

Set xmlDoc = objXml.documentElement  

 

Dim NodesLength  

NodesLength = xmlDoc.childNodes.length  

 

Dim i, appid, openid, mch_id, is_subscribe, nonce_str, product_id, sign  

For i= 0 to NodesLength-1  

   If "#text" <> xmlDoc.childNodes(i).nodeName Then  

       Execute(xmlDoc.childNodes(i).nodeName & "=""" & Replace(Replace(xmlDoc.childNodes(i).text, """", ""), "'", "") & """")  

   End If  

Next  

 

Dim ShiJian, DingDan, out_trade_no  

ShiJian = now()  

DingDan = year(shijian) & right("0" & month(shijian), 2) & right("0" & day(shijian), 2) & right("0" & hour(shijian), 2) & right("0" & minute(shijian), 2) & right("0" & second(shijian), 2)  

 

Dim wxPayStr  

Dim time_stamp  

out_trade_no = DingDan  

 

time_stamp = DateDiff("s", "1970-1-1 00:00:00", Now())  

 

randomize timer  

Dim rdCode  

rdCode = Int((32767)*Rnd +1000)  

 

nonce_str = MD5(rdCode)  

 

Dim IP  

IP = "127.0.0.1"  

 

Dim key, attach, body, notify_url, total_fee, trade_type  

key = "12345678901234567890123456789012"        '32位API密钥,替换成您的API密钥  

attach = "支付测试"  

body = "扫码支付测试"  

notify_url = "http://127.0.0.1/WxPayTest/Wx_Notify.asp"     '替换成您的网址  

total_fee = 1  

trade_type = "NATIVE"  

 

Dim stringA  

stringA = "appid=" & appid & "&attach=" & attach & "&body=" & body & "&mch_id=" & mch_id & "&nonce_str=" & nonce_str & "¬ify_url=" & notify_url & "&openid=" & openid & "&out_trade_no=" & out_trade_no & "&product_id=" & product_id & "&spbill_create_ip=" & IP & "&total_fee=" & total_fee & "&trade_type=" & trade_type  

 

Dim stringSignTemp  

stringSignTemp = stringA & "&key=" & key  

 

sign = UCase(MD5(stringSignTemp))  

 

Dim orderStr, ReturnStr  

orderStr = "<xml>" & _  

"<appid>" & appid & "</appid>" & _  

"<attach>" & attach & "</attach>" & _  

"<body>" & body & "</body>" & _  

"<mch_id>" & mch_id & "</mch_id>" & _  

"<nonce_str>" & nonce_str & "</nonce_str>" & _  

"<notify_url>" & notify_url & "</notify_url>" & _  

"<openid>" & openid & "</openid>" & _  

"<out_trade_no>" & out_trade_no & "</out_trade_no>" & _  

"<product_id>" & product_id & "</product_id>" & _  

"<spbill_create_ip>" & IP & "</spbill_create_ip>" & _  

"<total_fee>" & total_fee & "</total_fee>" & _  

"<trade_type>" & trade_type & "</trade_type>" & _  

"<sign>" & sign & "</sign>" & _  

"</xml>"  

 

ReturnStr =  PostXML(WxUrl, orderStr)  

Response.write ReturnStr  

 

'----此处根据您的需求加入您的程序对统一下单结果进行处理---------------------------  

 

 

Function PostXML(pUrl, pXml)  

   PostXML = ""  

   Dim https, ResponseBody  

   Set https = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")  

   https.setOption(3) = "LOCAL_MACHINE\My\MMPay"  

     

   Dim xmlDoc  

   Set xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0")  

   xmlDoc.async = false  

   xmlDoc.loadXML pXml  

     

   With https  

       .Open "Post", pUrl, False  

       .setRequestHeader "Content-Type","application/xml;charset=UTF-8"  

       .Send xmlDoc    'pXml  

       PostXML = .ResponseText  

   End With  

   Set https = Nothing  

End Function%>

此部份中有一个技术点就是PostXML函数中加入证书,https.setOption(3) = "LOCAL_MACHINE\My\MMPay",这里调用的就是此前在服务器上安装的微信支付证书。

4、微信支付异步通知回调程序:Wx_Notify.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>  

<%Session.CodePage=65001%>  

<%Response.Charset = "utf-8"%>  

<%Response.CodePage=65001%>  

<%'获取微信消息内容  

Dim xmlCount, xmlRequest, xmlResult  

xmlCount = Request.TotalBytes  

If xmlCount>0 Then  

   xmlRequest = Request.BinaryRead(xmlCount)  

   xmlResult = Bytes2bStr(xmlRequest, "utf-8")  

 

   Dim return_code, return_msg  

   return_code = ""  

   return_msg = ""  

   Dim appid, mch_id, device_info, nonce_str, sign, result_code, err_code, err_code_des, openid, is_subscribe, trade_type, bank_type, total_fee, fee_type, cash_fee, cash_fee_type, coupon_fee, coupon_count, coupon_id_n, coupon_fee_n, transaction_id, out_trade_no, attach, time_end  

   appid = ""  

   mch_id = ""  

   device_info = ""  

   nonce_str = ""  

   sign = ""  

   result_code = ""  

   err_code = ""  

   err_code_des = ""  

   openid = ""  

   is_subscribe = ""  

   trade_type = ""  

   bank_type = ""  

   total_fee = ""  

   fee_type = ""  

   cash_fee = ""  

   cash_fee_type = ""  

   coupon_fee = ""  

   coupon_count = ""  

   coupon_id_n = ""  

   coupon_fee_n = ""  

   transaction_id = ""  

   out_trade_no = ""  

   attach = ""  

   time_end = ""  

     

   '识别微信消息  

   Dim objXml, xmlDoc  

   Set objXml = Server.CreateObject("Microsoft.XMLDOM")  

   objXml.preserveWhiteSpace = true  

   objXml.async = false  

 

   '加载微信字符串  

   Dim WeiXinStr  

   WeiXinStr = xmlResult  

   objXml.loadXML(WeiXinStr)  

   Set xmlDoc = objXml.documentElement  

 

   Dim NodesLength  

   NodesLength = xmlDoc.childNodes.length  

 

   Dim i  

   For i= 0 to NodesLength-1  

       If "#text" <> xmlDoc.childNodes(i).nodeName Then  

           Execute(xmlDoc.childNodes(i).nodeName & "=""" & Replace(Replace(xmlDoc.childNodes(i).text, """", ""), "'", "") & """")  

       End If  

   Next  

     

   If return_code = "SUCCESS" Then  

       '这里写入您对支付成功后的处理程序  

   End If  

     

End If%>

到此为止,微信支付的主体部份已经完成,你还需要做的就是在微信支付的回调结果中加入你自己的处理程序。希望以上部份能帮忙到你。

http://www.bajiege.com/soft/other/asp_wxpay.html

2017年10月13日随笔

http://www.cnblogs.com/rik28/p/6024425.html

age是定义在选项对象的data属性中的,为什么Vue实例可以直接访问它呢?

这是因为每个Vue实例都会代理其选项对象里的data属性。



http://www.cnblogs.com/rik28/p/6029304.html

开发框架

ExtJS可以称为第一代单页应用框架的典型,它封装了各种UI组件,用户主要使用JavaScript来完成整个前端部分,甚至包括布局。随着功能逐渐增加,ExtJS的体积也逐渐增大,即使用于内部系统的开发,有时候也显得笨重了,更不用说开发以上这类运行在互联网上的系统。

jQuery由于偏重DOM操作,它的插件体系又比较松散,所以比ExtJS这个体系更适合开发在公网运行的单页系统,整个解决方案会相对比较轻量、灵活。

但由于jQuery主要面向上层操作,它对代码的组织是缺乏约束的。如何在代码急剧膨胀的情况下控制每个模块的内聚性,并且适当在模块之间产生数据传递与共享,就成为了一种有挑战的事情。

为了解决单页应用规模增大时候的代码逻辑问题,出现了不少MV*框架,他们的基本思路都是在JS层创建模块分层和通信机制。有的是MVC,有的是MVP,有的是MVVM,而且,它们几乎都在这些模式上产生了变异,以适应前端开发的特点。

这类框架包括Backbone,Knockout,AngularJS,Avalon等。

asp 实现检测字符串是否为纯字母和数字组合的函数

<%

   '******************************

   '函数:CheckString(strng)

   '参数:strng,待验证字符串

   '作者:阿里西西

   '日期:2007/7/13

   '描述:检测字符串是否为纯字母和数字组合

   '示例:<%=CheckString(strng)%>

   '******************************

   Function CheckString(strng)

   CheckString = true

   Dim regEx, Match

   Set regEx = New RegExp

   regEx.Pattern = "^[A-Za-z0-9]+$"

   regEx.IgnoreCase = True

   Set Match = regEx.Execute(strng)

   if match.count then CheckString= false

   End Function

   %>

   检测是否为中文字符

   <%

   '******************************

   '函数:CheckChinese(strng)

   '参数:strng,待验证字符

   '作者:阿里西西

   '日期:2007/7/13

   '描述:检测是否为中文字符,返回值:中文为true,否则false

   '示例:<%=CheckChinese(strng)%>

   '******************************

   Function CheckChinese(strng)

   CheckChinese = true

   Dim regEx, Match

   Set regEx = New RegExp

   regEx.Pattern = "\||\#|\&|\?|\@|\%|\*|\/|\.|\,|\;|\'|\:|\-|\_|\+|\^|\""|\=|\<|\>|\ "

   regEx.IgnoreCase = True

   Set Match = regEx.Execute(strng)

   if match.count then CheckChinese= false

   End Function

   %>

Asp读取xml存储的图片Base64编码,还原成图片

base.xml代码

<?xml version="1.0" encoding="gb2312"?>  

<data>  

<![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQ4AAAEsCAYAAAAy1V2YAAAJCElEQVR42u3dDYobORAG0Nwpd8qdcqfcaReziBRFSSp192SD/R6YhFnPxLNYn6XS37dvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAME//FW8IxEcCA4EB4IDBIfgAMEhOEBwCA4QHAgOBAeCA8GB4ADBIThAcAgOEBwIDgQHggPBgeAAwSE4QHAIDhAcCA4EB4IDwYHgAMEhOEBwCA4QHP+3X796z/v58/dDcCA4mo3r1WB+/Pjd0F5/xkf1/Nej0zDzz3rqsQuC1+/TeY2v//567ut/n+BAcBwEx/fv/z1GwxmNKX5t1tBWDTP+7Nfz899XX1s9p3pdOTg6zxtmv6vgQHBsGlnucYzGVPU4uo0yPnf8G3cfIzxW//boFXV7EYIDwXHY26gazSo4YtBc/fl3ahaz13VnuCI4EByHvY3Xt8Xexq7Bx+95Ijh2NYv8uk56O516yGnvRHDw0cERG0wOgdkne6xvjLCJMxL5031WPzkZ+owezvj5sx5S7AnNHnlIFnscsX5SPbozNIKDtw6O0dByCIwGlmsTIxRGIxuPWLTc9VxiCFSFzKpx5qCqnlu9rtmj+nc6wXGhN+IdyfsFR2xo+dM8z2DE8Ih/r8JnNVSpCrGxJxDrEtX372Z7rkzlGqogOA5rGzE4qsJiHmJUsy9VL2JV48hTuVWwjF5BDpqT4uhpiCqOIjiaC57Go1PjiPWQ2MBWja4KjlzTmAXDCK8YbLt6SGfRmuCAw+CIoRGHJLNFXiM48vdVQ4mqBzAbWsQez6rmsVqYtqqHzGaCZlOzVo4iOA6mR2PhcfW8OGyIX7saHLMgquov8Wd3ZmCqesuqhvH0WhPBwdsOVfLwYzSYGA65OFoVN6u6R3eqddbI4/flxr4Lqly8raZ0q15NDKmTpe2Cg4+bVclTnbExx/UQsQHnYuho4LMhQGc9yGxoEWdrums+ZjWV8fPiTE5n6ra70E1w8JHBET+Jc0POn9bxezqrQmc1jvhJPxtaVDWVqkexWhI/XkP8N3bTrw/tmPWO5D2DI68crfah5B5G/J6rwRHXbuQFXnljXHx9swVgq017I+Di79SpaZwsrRcc6HF869cHZjWKVXDk2kZu6HFoVBVku2EVF6ntah6d/zeCA8HR6HGMT//cyHJ9YvWJ3Fn5mbfy5zCKX4srW7sLwPIw5TQ49DgQHM0ex65IGGsUu3Mx8srQWS9ldvhO7DHs9rXMttbH6edObaZTBxEc6HH8qFeHVkXCqsfRHark2Y1qd+vq/IzdUCWuEK1mTuJqVT0OeLDHMduynleQxp2xq+nYatHY1fMzZtOxsWibgyLv7s0F3nwsQN68p8eB4Gj0OHaLuXKP5GR37F2rYUZVSN393nlpe14EpseB4Dg4yGfWYKvzLPKise5JYqfHBcbFaKsl7qe/dzyAKP5pVgXBcaMAGBv/qjeyWjp+t8eR6xXdqxnubKPPNQ4ngCE4mud9nj5v9um+KqCe/JynNqF1XlPsgehxIDj4U7wjERwIDgQHggP+/uDo1AziOouT9R1P1nMEB4LjsICZl3qvzu88KXh2TxKvDuKJu1uvFke7y8xnr11wIDgaqzF3d8fmjWtXFpvtXks8O2M1FXwy/Xp3dkdwIDj+mTfM3f0lV9ZmdG64n52ufqfR5+Xj8Xc8uX9FcCA4Nis7d5dOX1mE1VmJuQuOq79f3ruyenQ27wkOPjo4OpdOr4Ljzr6YagNdtW0+1zjiYrDOAq58hmr+eXmr/UOhITh4z+DIB+ec9ETyRrfq0un89bjPJH59tv099zhmW+RPQ7GzH+ehFarekbxncHQunc6f9rMTwqs6SdXgc8OvtrOv7lKpQqpT19ht6f+CS5m8I3mv4KiuJ4i9jOqukdWl07OdsbHXkbfk7643uFIcrS56iiePrWaJHhyiCA7eMzjyoTe57jCboq0acHd9RGc6NvZ4rgTH7HSv2PvJvZlVqAgOBMekt7G6O7a6iyQ3vCeDo7o3JX7tZBftqmeRr2b4gtAQHLxPcMwune4UR69cOt2Zjs3nhM4WgOUh0p1t/g9PuwoO3j84Yld+1Zhn1xrcDY48LKrOMM09nTjMuNvg88/7wpWk3pG811AlDz/yvSr5/M18udFocLtLp6vgqA4Q3vU48knpVw71yRdNP3wzveDg/Yujs+FD59Lp3BNZ1R/ywq48FTs7ajBvcru65DyGW542zmtJqsVhTgBDcDQKlru7Y/OGsdWNaLOFW92b3/I6jtPduDH0rj5unHAuOPi8Hsfu7tj4yb27HCl+knf2qlztceQl67tVpjGY8tceWtfhHcln9ThmwZEb565B5/Ued6djV/9OXJuSe0SnNY0HbqoXHHxejyNfOr27AvJKY8zXLow/Z7MqMahWt7nl/TLdWZ/dDJDgQHAsehyz8X7VCznZ21HdQZunWatp0jx9mjfLXTk24CQ4DFUQHJvDdfJelLuXTu8O8qkOz1mdABZfQ+ewnavBYaiC4Gg0kFVx9M6l01eWnD95AlgMotkxAHm3bSzkCg4ER2MsP7vKMZ9XMRr26k7ZqyeAzbbnXw2OvPDs9BQwwYHguNCYZ2d35J7EbGt9Pl2rExxP9jjywUOdR97Dc7HO4R3JZwxVdsOH1aXT1TLwamjzVes4OntzrtQ4FEcRHIt9K088b9YIu8u3Z1OqVy+ujscDnATH+L6b+1m8I3nP4Pgb/eHb1mxyQ3AgOEBwCA4QHIIDBId6ieBAcAgMwYHgQHCA4BAcIDgEBwgOBAeCA8GB4EBwgOAQHCA4BAcIDgQHggPBgeBAcIDgEBwgOAQHCA7BAYIDwYHgQHAgOBAcIDgEBwAAAAAAAAAAAAAAAAAAAADAo/4F6+HmEPy+t9QAAAAASUVORK5CYII=]]>  

</data>  


把以下代码保存为base.asp

<%  

Dim xml : Set xml=Server.CreateObject("MSXML2.DOMDocument")  

Dim stm : Set stm=Server.CreateObject("ADODB.Stream")  

xml.resolveExternals=False  

xml.load Server.MapPath("base.xml")  

xml.documentElement.setAttribute "xmlns:dt","urn:schemas-microsoft-com:datatypes"  

xml.documentElement.dataType = "bin.base64"  

stm.Type=1 'adTypeBinary  

stm.Open  

stm.Write xml.documentElement.nodeTypedValue  

stm.SaveToFile Server.MapPath("12.png")  

stm.Close  

Set xml=Nothing  

Set stm=Nothing  

%>  


http://blog.csdn.net/plcc123/article/details/9358277

JS如何获取许多个
  • 标签内容并将其存进数组
  • <ul>

       <li>1</li>

       <li>2</li>

       <li>3</li>

       <li>4</li>

       <li>5</li>

       <li>6</li>

       <li>7</li>

       <li>8</li>

       <li>9</li>

       <li>10</li>

    </ul>


    我需要得到一个数组 new Array=(1,2,3,4,5,6,7,8,9,10),应该如何操作?



    var arr = document.getElementsByTagName('li'),temp = [];

    for(var i = 0;i<arr.length;i++){

       temp.push(arr[i].innerHTML)

    }


    JQuery


    <!DOCTYPE html>

    <html lang="en">

    <head>

       <meta charset="UTF-8">

       <title>Document</title>

    </head>

    <body>

       <div id="box">

           <input type="text">

           <input type="text">

           <input type="text">

           <input type="text">

           <input type="button" id="btn" onclick="Total()" value="转化为数组">

       </div>

       <script src="这里是jquery文件路径"></script>

       <script>

       function Total() {

           var numArr = []; // 定义一个空数组

           var txt = $('#box').find(':text'); // 获取所有文本框

           for (var i = 0; i < txt.length; i++) {

               numArr.push(txt.eq(i).val()); // 将文本框的值添加到数组中

           }

           console.info(numArr);

       }

       </script>

    </body>

    </html>

    http://www.qdfuns.com/notes/45387/37f1c6a98a0bd4d83e65c7d341de5580.html

    微信浏览器相关知识

    1、javascript  判断微信浏览器

    if(navigator.userAgent.toLowerCase().match(/micromessenger/i)){

             

    }

    2、微信内置API使用

    <script type="text/javascript">

       

        document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {

           

            /*隐藏底部toolbar栏*/

            WeixinJSBridge.call('hideToolbar');

           //获取当前网络状态:wifi\2G\3G...

           WeixinJSBridge.invoke('getNetworkType',{},function(e){

                alert(e.err_msg);

               /*network_type:wifi         wifi网络

                network_type:edge      非wifi,包含3G/2G

               network_type:fail         网络断开连接

                network_type:wwan     2g或者3g*/

            });

            //设置分享到朋友圈的内容

           sendMessage();

        });

       

        //退出微信内浏览器

        function close_wechat(){

            if( window.confirm('你确定要离开微网站吗?') ){

                WeixinJSBridge.call("closeWindow");

           }

        }

        //初始化分享内容的函数

        function sendMessage(){

            WeixinJSBridge.on('menu:share:timeline', function(argv){

                 WeixinJSBridge.invoke('shareTimeline',{

                    "appid":"",                                              //appid 设置为空

                    "img_url":"http://www.baidu.com/img/bdlogo.gif",//分享图片路径

                    "img_width":    "120",                            //图片宽度

                    "img_height":    "120",                            //图片高度

                    "link":"http://www.sina.com.cn/",//源链接地址

                    "desc":"这是介绍,但是介绍一般不会显示出来",//分享内容介绍

                    "title":"这是分享的标题。"

                }, function(res){/*** 回调函数,最好设置为空 ***/});

            });    

        }

    </script>

    http://www.qdfuns.com/notes/36367/0401ee206fceb32742741b979638cb7a.html

    javascript+html5+css3下拉刷新 数据效果

    原生app里的数据列表都会使用下拉刷新的效果,在webapp里可以采用iscroll、swiper等插件或框架实现,那么如何自己编码实现类似的效果呢,下面介绍使用原生js+css3实现的简单效果。


    html布局


    <!DOCTYPE html>

    <html>

    <head>  

    <meta charset="utf-8">  

    <meta name="viewport" content="width=device-width, initial-scale=1.0,  user-scalable=no">

    <title>test</title>

    <style type="text/css" media="screen">

       body{margin: 0;}

       ul{list-style: none;padding: 0;}

       li{height: 30px;border-bottom: 1px solid #ddd;line-height: 30px;padding-left: 10px;}

       .scroller .loading{height: 60px;line-height: 60px;text-align: center;width: 100%;background-color: #f1f1f1;}

       .scroller{-webkit-overflow-scrolling:touch;}

    </style>

    </head>

    <body >

    <div id="container" class="scroller" >

    <div class="loading">

      下拉刷新数据

    </div>

    <ul>

       <li><a href="#">列表数据1</a></li>

       <li><a href="#">列表数据2</a></li>

       <li><a href="#">列表数据3</a></li>

       <li><a href="#">列表数据4</a></li>

       <li><a href="#">列表数据5</a></li>

       <li><a href="#">列表数据6</a></li>

       <li><a href="#">列表数据7</a></li>

       <li><a href="#">列表数据8</a></li>

       <li><a href="#">列表数据9</a></li>

       <li><a href="#">列表数据10</a></li>

       <li><a href="#">列表数据11</a></li>

       <li><a href="#">列表数据12</a></li>

       <li><a href="#">列表数据13</a></li>

       <li><a href="#">列表数据14</a></li>

       <li><a href="#">列表数据15</a></li>

       <li><a href="#">列表数据16</a></li>

       <li><a href="#">列表数据17</a></li>

       <li><a href="#">列表数据18</a></li>

       <li><a href="#">列表数据19</a></li>

       <li><a href="#">列表数据20</a></li>

       <li><a href="#">列表数据21</a></li>

       <li><a href="#">列表数据22</a></li>

       <li><a href="#">列表数据23</a></li>

       <li><a href="#">列表数据24</a></li>

       <li><a href="#">列表数据25</a></li>

       <li><a href="#">列表数据26</a></li>

       <li><a href="#">列表数据27</a></li>

       <li><a href="#">列表数据28</a></li>

       <li><a href="#">列表数据29</a></li>

       <li><a href="#">列表数据30</a></li>

    </ul>

    </div>

    <body>

    </html>


    js逻辑


    var slide = function (option) {

       var defaults={

           container:'',

           next:function(){}

       }

       var start,

               end,

               length,

               isLock = false,//是否锁定整个操作

               isCanDo = false,//是否移动滑块

               isTouchPad = (/hp-tablet/gi).test(navigator.appVersion),

               hasTouch = 'ontouchstart' in window && !isTouchPad;

       var obj = document.querySelector(option.container);

       var loading=obj.firstElementChild;

       var offset=loading.clientHeight;

       var objparent = obj.parentElement;

       /*操作方法*/

       var fn =

       {

           //移动容器

           translate: function (diff) {

               obj.style.webkitTransform='translate3d(0,'+diff+'px,0)';

               obj.style.transform='translate3d(0,'+diff+'px,0)';

           },

           //设置效果时间

           setTransition: function (time) {

               obj.style.webkitTransition='all '+time+'s';

               obj.style.transition='all '+time+'s';

           },

           //返回到初始位置

           back: function () {

               fn.translate(0 - offset);

               //标识操作完成

               isLock = false;

           },

           addEvent:function(element,event_name,event_fn){

               if (element.addEventListener) {

                   element.addEventListener(event_name, event_fn, false);

               } else if (element.attachEvent) {

                   element.attachEvent('on' + event_name, event_fn);

               } else {

                   element['on' + event_name] = event_fn;

               }

           }

       };


       fn.translate(0-offset);

       fn.addEvent(obj,'touchstart',start);

       fn.addEvent(obj,'touchmove',move);

       fn.addEvent(obj,'touchend',end);

       fn.addEvent(obj,'mousedown',start)

       fn.addEvent(obj,'mousemove',move)

       fn.addEvent(obj,'mouseup',end)


       //滑动开始

       function start(e) {

           if (objparent.scrollTop <= 0 && !isLock) {

               var even = typeof event == "undefined" ? e : event;

               //标识操作进行中

               isLock = true;

               isCanDo = true;

               //保存当前鼠标Y坐标

               start = hasTouch ? even.touches[0].pageY : even.pageY;

               //消除滑块动画时间

               fn.setTransition(0);

               loading.innerHTML='下拉刷新数据';

           }

           return false;

       }


       //滑动中

       function move(e) {

           if (objparent.scrollTop <= 0 && isCanDo) {

               var even = typeof event == "undefined" ? e : event;

               //保存当前鼠标Y坐标

               end = hasTouch ? even.touches[0].pageY : even.pageY;

               if (start < end) {

                   even.preventDefault();

                   //消除滑块动画时间

                   fn.setTransition(0);

                   //移动滑块

                   if((end-start-offset)/2<=150) {

                       length=(end - start - offset) / 2;

                       fn.translate(length);

                   }

                   else {

                       length+=0.3;

                       fn.translate(length);

                   }

               }

           }

       }

       //滑动结束

       function end(e) {

           if (isCanDo) {

               isCanDo = false;

               //判断滑动距离是否大于等于指定值

               if (end - start >= offset) {

                   //设置滑块回弹时间

                   fn.setTransition(1);

                   //保留提示部分

                   fn.translate(0);

                   //执行回调函数

                   loading.innerHTML='正在刷新数据';

                   if (typeof option.next == "function") {

                       option.next.call(fn, e);

                   }

               } else {

                   //返回初始状态

                   fn.back();

               }

           }

       }

    }

    slide({container:"#container",next: function (e) {

       //松手之后执行逻辑,ajax请求数据,数据返回后隐藏加载中提示

       var that = this;

       setTimeout(function () {

           that.back.call();

       }, 2000);

    }});

    JavaScript图片延迟加载微型库Echo.js

    Echo.js是一个标准的独立的Javascript图片懒加载(延迟加载)库,它非常小巧快速,只有2KB,它使用HTML5的 data-*属性,延迟请求加载图片资源,不依赖任意第三方插件库,特别适用于移动端需要加载大量图片的应用。

    附件

    将kindeditor编辑器JS成脚本

    KindEditor.ready(function(K) {

    var editor1 = K.create('textarea[name="Content"]', {

    cssPath : '../editor/plugins/code/prettify.css',

    uploadJson : '../editor/asp/upload_json.asp',

    fileManagerJson : '../editor/asp/file_manager_json.asp',

    allowFileManager : true,

    afterCreate : function() {

    var self = this;

    K.ctrl(document, 13, function() {

    self.sync();

    K('form[name=addform]')[0].submit();

    });

    K.ctrl(self.edit.doc, 13, function() {

    self.sync();

    K('form[name=addform]')[0].submit();

    });

    }

    });

    prettyPrint();

    });

    jquery JSON的解析方式

    这里首先给出JSON字符串集,字符串集如下:


    var data="

    {

    root:

    [

    {name:'1',value:'0'},

    {name:'6101',value:'西安市'},

    {name:'6102',value:'铜川市'},

    {name:'6103',value:'宝鸡市'},

    {name:'6104',value:'咸阳市'},

    {name:'6105',value:'渭南市'},

    {name:'6106',value:'延安市'},

    {name:'6107',value:'汉中市'},

    {name:'6108',value:'榆林市'},

    {name:'6109',value:'安康市'},

    {name:'6110',value:'商洛市'}

    ]

    }";




    注意:字符串的链接在一行或者用+链接起来


    这里以jquery异步获取的数据类型——json对象和字符串为依据,分别介绍两种方式获取到的结果处理方式。


    1.eval()


    对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次。这种方式也适合以普通javascipt方式获取json对象,以下举例说明:


    var dataObj=eval("("+data+")");//转换为json对象

    alert(dataObj.root.length);//输出root的子对象数量

    $.each(dataObj.root,fucntion(idx,item){

    if(idx==0){

    return true;

    }


    //输出每个root子对象的名称和值

    alert("name:"+item.name+",value:"+item.value);

    })


    注:对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变。


    2.$.getJSON


    对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,这里以$.getJSON方法为例说明数据处理方法:


    $.getJSON("http://gaoyusi.blog.163.com/",{param:"gaoyusi"},function(data){

    //此处返回的data已经是json对象

    //以下其他操作同第一种情况

    $.each(data.root,function(idx,item){

    if(idx==0){

    return true;//同countinue,返回false同break

    }


    alert("name:"+item.name+",value:"+item.value);


    });

    });


    这里特别需要注意的是方式1中的eval()方法是动态执行其中字符串(可能是js脚本)的,这样很容易会造成系统的安全问题。所以可以采用一些规避了eval()的第三方客户端脚本库,比如JSON in JavaScript就提供了一个不超过3k的脚本库。


    3jQuery解析Json对象:

    jQuery提供了另一种方法“parseJSON”,这需要一个标准的JSON字符串,并返回生成的JavaScript对象。让我们来看

    看语法:

    data = $.parseJSON(string);

    看看它是如何运用的到实际开发中的:


    代码如下:


    $.ajax({

    url: dataURL, success: function(results) {

    var parsedJson = jQuery.parseJSON(results);

    alert(parsedJson.name);

    }

    });


    http://www.cnblogs.com/leejersey/p/3594473.html

    jquery 对 Json 的各种遍历

    概述


    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。


    在JSON中,有两种结构:对象和数组。


    1.对象


    一个对象以“{”开始,“}”结束。每个“key”后跟一“:”,“‘key/value’ 对”之间运用 “,”分隔。


    packJson = {"name":"caibaojian.com", "password":"111"}


    2.数组


    packJson = [{"name":"caibaojian.com", "password":"111"}, {"name":"tony", "password":"111"}];


    数组是值的有序集合。一个数组以“[”开始,“]”结束。值之间运用 “,”分隔。


    JSON对象和JSON字符串的转换


    在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:


    JSON字符串:


    var jsonStr = '{"name":"caibaojian", "password":"1111"}';


    JSON对象:


    var jsonObj = {"name":"caibaojian.com", "password":"1111"};


    1、String转换为Json对象


    var jsonObj = eval('(' + jsonStr + ')');

    2.Json对象转换为String字符串


    var jsonStr = jsonObj.toJSONString();

    jQuery遍历json对象


    grep


    <script type='text/javascript' src="/jquery.js"></script>

    <script type="text/javascript">

    $().ready(

    function(){

    var array = [1,2,3,4,5,6,7,8,9];

    var filterarray = $.grep(array,function(value){

    return value > 5;//筛选出大于5的

    });

    for(var i=0;i<filterarray.length;i++){

    alert(filterarray[i]);

    }

    for (key in filterarray){

    alert(filterarray[key]);

    }

    }

    );

    </script>

    each


    <script type='text/javascript' src="/jquery.js"></script>

    <script type="text/javascript">

    $().ready(

    function(){

    var anObject = {one:1,two:2,three:3};//对json数组each

    $.each(anObject,function(name,value) {

    alert(name);

    alert(value);

    });

    var anArray = ['one','two','three'];

    $.each(anArray,function(n,value){

    alert(n);

    alert(value);

    }

    );

    }

    );

    </script>

    inArray


    <script type='text/javascript' src="/jquery.js"></script>

    <script type="text/javascript">

    $().ready(

    function(){

    var anArray = ['one','two','three'];

    var index = $.inArray('two',anArray);

    alert(index);//返回该值在数组中的键值,返回1

    alert(anArray[index]);//value is two

    }

    );

    </script>

    map


    <script type='text/javascript' src="/jquery.js"></script>

    <script type="text/javascript">

    $().ready(

    function(){

    var strings = ['0','1','2','3','4','S','6'];

    var values = $.map(strings,function(value){

    var result = new Number(value);

    return isNaN(result) ? null:result;//isNaN:is Not a Number的缩写

    }

    );

    for (key in values) {

    alert(values[key]);

    }

    }

    );

    </script>

    原生Js遍历json对象


    遍历json对象:


    无规律:


    <script>

    var json = [{dd:'SB',AA:'东东',re1:123},{cccc:'dd',lk:'1qw'}];

    for(var i=0,l=json.length;i<l;i++){

    for(var key in json[i]){

    alert(key+':'+json[i][key]);

    }

    }

    </script>

    有规律:


    packJson = [


    {"name":"nikita", "password":"1111"},


    {"name":"tony", "password":"2222"}


    ];


    for(var p in packJson){//遍历json数组时,这么写p为索引,0,1


      alert(packJson[p].name + " " + packJson[p].password);


    }

    也可以用这个:


    for(var i = 0; i < packJson.length; i++){


      alert(packJson[i].name + " " + packJson[i].password);


    }

    遍历json对象


    myJson = {"name":"caibaojian", "password":"1111"};


    for(var p in myJson){//遍历json对象的每个key/value对,p为key


      alert(p + " " + myJson[p]);


    }

    有如下 json对象:

    var obj ={"name":"冯娟","password":"123456","department":"技术部","sex":"女","old":30};

    遍历方法:

    for(var p in obj){

    str = str+obj[p]+’,';

    return str;

    }

    (http://caibaojian.com/jquery-each-json.html)

    Jquery解析json数组字符串

    最近在工作中用到了Jquery来解析json字符串,网上解析jquery解析json单个对象的实例不少,但是jquery解析json数组的实例却是不多,下面我举一个简单的例子来跟大家分享与一下,本人水平有限,还希望各位批评指教。


    一个json对象数组的json字符串:

    var str=[{"Price":12,"Name":"aaa","Age",22},{"Price":24,"Name":"bbb","Age",33}];

    在前台,使用jquery的parseJSON方法来进行解析,并用jquery的foreach的方法来进行解析,代码如下:


    var jsonarray= $.parseJSON(str);

    alert(jsonarray);

    $.each(jsonarray, function (i, n)

    {

       alert(n.Price);

    }

    对于不同版本的jquery来说,它们解析的json对象数组的字符串格式也不同(我使用了两个不同版本的jquery,就遇到了这样的问题),如果上述代码无法解析,就用eval函数来包裹一下,代码如下:


    var jsonarray= $.parseJSON(str);

    $.each(eval("(" + jsonarray+ ")"), function (i, n) {

       alert(n.Price);

    }

    在解析json对象数组字符串的过程中,也可以使用alert来弹出$.parseJSON(str)解析后的结果,如果弹出的对话框中显示object,则说明解析成功了,可以通过对象.属性名获得到对应属性的值,如果弹出的不是object,则用eval()来进行包装一下形成对象,再获得对应属性的值。


    以上就是我在使用jquery解析json对象数组的过程中总结的小小心得,写得不好,期待大家批评指教。



    今天是星期几的4种JS代码写法

    <div id="div1" style="display:none">星期1</div>

    <div id="div2" style="display:none">星期2</div>

    <div id="div3" style="display:none">星期3</div>

    <div id="div4" style="display:none">星期4</div>

    <div id="div5" style="display:none">星期5</div>

    <div id="div6" style="display:none">星期6</div>

    <div id="div0" style="display:none">星期日</div>

    <script type="text/javascript">

    document.getElementById("div" + (new Date()).getDay()).style.display = "";

    </script>

    http://www.jb51.net/article/41442.htm

    ASP数组排序

    <%

    ''*** build example array to show that this thing can sort

    ''*** alpha-numeric arrays

    Dim MyArray

    MyArray = Array(1,5,"shawn","says","hello",123,12,98)

    MyArray = Sort(MyArray)

    For I = 0 to Ubound(MyArray)

    Response.Write MyArray(I) & "<br>" & vbCRLF

    Next



    ''*** Sorter Function that takes an array and sorts it

    Function Sort(ary)

    KeepChecking = TRUE

    Do Until KeepChecking = FALSE

    KeepChecking = FALSE

    For I = 0 to UBound(ary)

    If I = UBound(ary) Then Exit For

    If ary(I) > ary(I+1) Then

    FirstValue = ary(I)

    SecondValue = ary(I+1)

    ary(I) = SecondValue

    ary(I+1) = FirstValue

    KeepChecking = TRUE

    End If

    Next

    Loop

    Sort = ary

    End Function

    %>

    温和的性格是为人处事的基本原则,它可以让人少走很多弯路。

    温和的性格是为人处事的基本原则,它可以让人少走很多弯路。

    来谈谈SQL数据库中"简单的"SELECT TOP—可能有你从未注意到的细节

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    从这个查询计划中大家可以清楚的看到
    第一种扫描完zhuisuo表后先降序(top N Sort)然后在4行范围中取前2行
    第二种扫描完zhuisuo表后先升序取4行(top N Sort)然后再把这4行降序取2行(top N Sort)
    在这里就不得不简单的说说SQL语句中出现的表子查询了
    表子查询,而出现在from子句中的表我们称为派生表
    派生表是虚拟的,未被物理具体化,也就是说当编译的时候
    如(select top 2 * from (select top 4 * from zhuisuo) m order by m.id desc )
    外部查询和内部查询会被合并,并生成一个计划
    这时再看看上面的执行计划就一目了然了
    (注意事项:在派生表里面一般不允许使用order by除非指定了top
    也就是说select top 2 * from (select * from zhuisuo order by id asc) m order by m.id desc这句语句是不能执行的)
    派生表是个拟表要被外部引用,而order by返回的不是表而是游标.所以只用order by的话是被限制的
    然而为什么使用top加order by又可以了
    是因为top可以从order by返回的游标里选择指定数量生成一个表并返回

    Window.sessionStorage

    sessionStorage 属性允许你访问一个 session Storage 对象。它与 localStorage 相似,不同之处在于 localStorage 里面存储的数据没有过期时间设置,而存储在 sessionStorage 里面的数据在页面会话结束时会被清除。页面会话在浏览器打开期间一直保持,并且重新加载或恢复页面仍会保持原来的页面会话。在新标签或窗口打开一个页面会初始化一个新的会话,这点和 session cookies 的运行方式不同。


    应该注意的是,无论是 localStorage 还是 sessionStorage 中保存的数据都仅限于该页面的协议。


    语法

    // 保存数据到sessionStorage

    sessionStorage.setItem('key', 'value');


    // 从sessionStorage获取数据

    var data = sessionStorage.getItem('key');


    // 从sessionStorage删除保存的数据

    sessionStorage.removeItem('key');


    // 从sessionStorage删除所有保存的数据

    sessionStorage.clear();



    返回值


    一个 Storage 对象。


    示例

    下面的代码访问当前域名的 session Storage 对象,并使用 Storage.setItem() 访问往里面添加一个数据条目。


    sessionStorage.setItem('myCat', 'Tom');

    下面的示例会自动保存一个文本输入框的内容,如果浏览器因偶然因素被刷新了,文本输入框里面的内容会被恢复,因此写入的内容不会丢失。


    // 获取文本输入框

    var field = document.getElementById("field");


    // 检测是否存在 autosave 键值

    // (这个会在页面偶然被刷新的情况下存在)

    if (sessionStorage.getItem("autosave")) {

     // 恢复文本输入框的内容

     field.value = sessionStorage.getItem("autosave");

    }


    // 监听文本输入框的 change 事件

    field.addEventListener("change", function() {

     // 保存结果到 sessionStorage 对象中

     sessionStorage.setItem("autosave", field.value);

    });


    https://developer.mozilla.org/zh-CN/docs/Web/API/Window/sessionStorage

    CSS3 @font-face

    @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许多人会不自然的问,这样的东西IE能支持吗?当我告诉大家@font-face这个功能早在IE4就支持了你肯定会感到惊讶。我的Blog就使用了许多这样的自定义Web字体,比如说首页的Logo,Tags以及页面中的手写英文体,很多朋友问我如何使用,能让自己的页面也支持这样的自定义字体,一句话这些都是@font-face实现的,为了能让更多的朋友知道如何使用他,今天我主要把自己的一点学习过程贴上来和大家分享。


    首先我们一起来看看@font-face的语法规则:


      @font-face {

         font-family: <YourWebFontName>;

         src: <source> [<format>][,<source> [<format>]]*;

         [font-weight: <weight>];

         [font-style: <style>];

       }

    取值说明


    1、YourWebFontName:此值指的就是你自定义的字体名称,最好是使用你下载的默认字体,他将被引用到你的Web元素中的font-family。如“font-family:"YourWebFontName";”


    2、source:此值指的是你自定义的字体的存放路径,可以是相对路径也可以是绝路径;


    3、format:此值指的是你自定义的字体的格式,主要用来帮助浏览器识别,其值主要有以下几种类型:truetype,opentype,truetype-aat,embedded-opentype,avg等;


    4、weight和style:这两个值大家一定很熟悉,weight定义字体是否为粗体,style主要定义字体样式,如斜体。


    兼容浏览器




    说到浏览器对@font-face的兼容问题,这里涉及到一个字体format的问题,因为不同的浏览器对字体格式支持是不一致的,这样大家有必要了解一下,各种版本的浏览器支持什么样的字体,前面也简单带到了有关字体的几种格式,下面我就分别说一下这个问题,让大家心里有一个概念:


    一、TureTpe(.ttf)格式:


    .ttf字体是Windows和Mac的最常见的字体,是一种RAW格式,因此他不为网站优化,支持这种字体的浏览器有【IE9+,Firefox3.5+,Chrome4+,Safari3+,Opera10+,iOS Mobile Safari4.2+】;


    二、OpenType(.otf)格式:


    .otf字体被认为是一种原始的字体格式,其内置在TureType的基础上,所以也提供了更多的功能,支持这种字体的浏览器有【Firefox3.5+,Chrome4.0+,Safari3.1+,Opera10.0+,iOS Mobile Safari4.2+】;


    三、Web Open Font Format(.woff)格式:


    .woff字体是Web字体中最佳格式,他是一个开放的TrueType/OpenType的压缩版本,同时也支持元数据包的分离,支持这种字体的浏览器有【IE9+,Firefox3.5+,Chrome6+,Safari3.6+,Opera11.1+】;


    四、Embedded Open Type(.eot)格式:


    .eot字体是IE专用字体,可以从TrueType创建此格式字体,支持这种字体的浏览器有【IE4+】;


    五、SVG(.svg)格式:


    .svg字体是基于SVG字体渲染的一种格式,支持这种字体的浏览器有【Chrome4+,Safari3.1+,Opera10.0+,iOS Mobile Safari3.2+】。


    这就意味着在@font-face中我们至少需要.woff,.eot两种格式字体,甚至还需要.svg等字体达到更多种浏览版本的支持。


    为了使@font-face达到更多的浏览器支持,Paul Irish写了一个独特的@font-face语法叫Bulletproof @font-face:


      @font-face {

    font-family: 'YourWebFontName';

    src: url('YourWebFontName.eot?') format('eot');/*IE*/

    src:url('YourWebFontName.woff') format('woff'), url('YourWebFontName.ttf') format('truetype');/*non-IE*/

      }

    但为了让各多的浏览器支持,你也可以写成:


      @font-face {

    font-family: 'YourWebFontName';

    src: url('YourWebFontName.eot'); /* IE9 Compat Modes */

    src: url('YourWebFontName.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */

                url('YourWebFontName.woff') format('woff'), /* Modern Browsers */

                url('YourWebFontName.ttf')  format('truetype'), /* Safari, Android, iOS */

                url('YourWebFontName.svg#YourWebFontName') format('svg'); /* Legacy iOS */

      }

    说了这么多空洞的理论知识,大家一定有点心痒痒了,那么我们先来看看W3CPLUS首页中导航部分的兰色字体是如何实现的,假如我们有一个这样的DOM标签,需要应用自定义字体:


    HTML Code:


      <h2 class="neuesDemo">Neues Bauen Demo</h2>

    通过@font-face来定义自己的Web Font:


     @font-face {

       font-family: 'NeuesBauenDemo';

       src: url('../fonts/neues_bauen_demo-webfont.eot');

       src: url('../fonts/neues_bauen_demo-webfont.eot?#iefix') format('embedded-opentype'),

    url('../fonts/neues_bauen_demo-webfont.woff') format('woff'),

    url('../fonts/neues_bauen_demo-webfont.ttf') format('truetype'),

    url('../fonts/neues_bauen_demo-webfont.svg#NeuesBauenDemo') format('svg');

       font-weight: normal;

       font-style: normal;

     }

    我在这里采用的是相对路径,当然大家也可以使用绝路径。到这里我们就需要把定义好的字体应用到我们实际页面中去:


      h2.neuesDemo {

         font-family: 'NeuesBauenDemo'

      }

    效果:




    看到上面的效果,我想大家会感到@font-face很神奇,同时也想争着做做看,可是一动手才发现,特殊字体我要怎样才能得到,那些.eot,.woff,.ttf,.svg这些字体格式又怎么获取呢?有些朋友可能就不知道如何运手了,那么我们就带着这些问题来一个全程完成的实例吧:


    一、获取特殊字体:


    我们拿下面这种single Malta字体来说吧:




    要得到single Malta字体,不外乎两种途径,其一找到付费网站购买字体,其二就是到免费网站DownLoad字体。当然要给钱的这种傻事我想大家都不会做的,那我们就得到免费的地方下载,在哪有呢?我平时都是到Google Web Fonts和Dafont.com寻找自己需要的字体,当然网上也还有别的下载字体的地方,这个Demo使用的是Dafont.com的Single Malta字体,这样就可以到这里下载Single Malta:




    Single Malta下载下来后,需要把它解压缩出来:




    二、获取@font-face所需字体格式:


    特殊字体已经在你的电脑中了,现在我们需要想办法获得@font-face所需的.eot,.woff,.ttf,.svg字体格式。要获取这些字体格式,我们同样是需要第三方工具或者软件来实现,下面我给大家推荐一款我常用的一个工具fontsquirrel,别的先不多说,首跟我点这里进入到下面这个界面吧。




    如果你进入页面没有看到上图,你可以直接点击导航:




    如果你看到了上面的界面,那就好办了,我们来看如何应用这个工具生成@font-face需要的各种字体,先把我们刚才下载的字体上传上去:




    上传后按下图所示操作:




    现在从Font Squirrel下载下来的文件已经保存在你本地的电脑上了,接着只要对他进行解压缩,你就能看到文件列表如下所示:




    大家可以看到,解压缩出来的文件格式,里面除了@font-face所需要的字体格式外,还带有一个DEMO文件,如果你不清楚的也可以参考下载下来的DEMO文件,我在这里不对DEMO说明问题,我主要是给大家介绍如何把下载下来的文件有价值的运用到我们的项目中。


    例如在自己的本地创建了一个fontface项目:




    为了让项目结构更清晰,我们在项目中单独创建一个fonts目录,用来放置解压缩出来@font-face所需的字体格式:




    现在@font-face所需字体已经加载到本地项目,现在本地项目中的style.css中附上我们需要的@font-face样式


      @font-face {

         font-family: 'SingleMaltaRegular';

         src: url('../fonts/singlemalta-webfont.eot');

         src: url('../fonts/singlemalta-webfont.eot?#iefix') format('embedded-opentype'),

              url('../fonts/singlemalta-webfont.woff') format('woff'),

      url('../fonts/singlemalta-webfont.ttf') format('truetype'),

      url('../fonts/singlemalta-webfont.svg#SingleMaltaRegular') format('svg');

         font-weight: normal;

         font-style: normal;

      }

    到这里为止,我们已经通过@font-face自定义好所需的SingleMalta字体,离最后效果只差一步了,就是把自己定义的字体应用到你的Web中的DOM元素上:


      h2.singleMalta {

        font-family: 'SingleMaltaRegular'

      }

    效果:




    看到上面的效果,那大家就知道我们实现成功了。那么关于@font-face帮你打造特殊效果的字体,到这里基本上就完成了,我在这里需要提醒使用者:


    1、如果你的项目中是英文网站,而且项目中的Logo,Tags等应用到较多的这种特殊字体效果,我建议你不要使用图片效果,而使用@font-face,但是你是中文网站,我觉得还是使用图片比较合适,因为加载英文字体和图片没有多大区别,但是你加载中文字体,那就不一样了,因为中文字体太大了,这样会影响到项目的某些性能的优化;


    2、致命的错误,你在@font-face中定义时,文件路径没有载对;


    3、你只定义了@font-face,但并没有应用到你的项目中的DOM元素上;


    以上几点都是在平时制作中常出现的问题,希望大家能小意一些,另外我们没有办法在购买所有字体,就算你实力雄厚,那也没有办法在一台服务器主机上放置你所有项目需要的字体。因此我给大家提供几个免费字体下载的网址:Webfonts,Typekit,Kernest,Google Web Fonts,Kernest,Dafont,Niec Web Type,不然你点这里将有更多的免费字体。前面几个链接是帮助你获取一些优美的怪异的特殊字体,但下面这个工具作用更是无穷的大,他能帮你生成@font-face所需要的各种字体,这工具就是Font Squirrel。


    最后在提醒一下,使用@font-face别的可以忘了,但Font Squirrel千万不能忘,因为他能帮你生成@font-face所需的各种字体格式。


    到此关于@font-face就介绍完了,不知道大家喜欢不喜欢,如果喜欢的话赶快动手实践一下,有Blog的可以马上运用上去,也可以炫一下。


    @font-face无法在Firefox下正常工作的解决方案,详细的请点击:http://stackoverflow.com/questions/2856502/css-font-face-not-working-with-firefox-but-working-with-chrome-and-ie

    在TTF字体中提取想要的文字

    工具地址:http://pan.baidu.com/s/1nv9eO7B 密码:fce4

    1. 确保你的电脑已经安装了Java环境(能运行Java命令),这是必须的。

    2.复制要提取的源字体(jz.ttf)到sfnttool所在目录下。

    3. 命令行进入到sfnttool所在目录下。(一个小技巧,在当前文件夹里按住Shift再右键,里面有个“在此处打开命令行”。)

    4. 输入下面的命令即可:

    java -jar sfnttool.jar  -s "这是要提取的文字,单引号表示时不能有空格" baidu.ttf zgbao.ttf

    提取baidu.ttf精简输出 zgbao.ttf

    关于asp输出json对象的方法及实例

    相信大家对于asp和json都不陌生,当下json应用的非常广泛,但asp语言中并没有可以直接生成json对象的方法,我在网上查了很多资料,关于asp生成json对象的方法,大多都写得很简单,大多很差强人意,有的虽然是写了关键的代码,但并没有实际的案例可供参考。现在我就把我实现的代码贴出来供大家参考。


    1.目的:用asp得到json对象:

    [javascript] view plain copy print?

    {"total":17,"rows":[{"News_ID":54,"NewsType_id":78},{"News_ID":55,"NewsType_id":78},{"News_ID":56,"NewsType_id":78},{"News_ID":57,"NewsType_id":78},{"News_ID":58,"NewsType_id":78},{"News_ID":59,"NewsType_id":78},{"News_ID":60,"NewsType_id":78},{"News_ID":61,"NewsType_id":78},{"News_ID":62,"NewsType_id":78},{"News_ID":63,"NewsType_id":78},{"News_ID":64,"NewsType_id":78},{"News_ID":65,"NewsType_id":78},{"News_ID":106,"NewsType_id":78},{"News_ID":107,"NewsType_id":78},{"News_ID":126,"NewsType_id":78},{"News_ID":192,"NewsType_id":78},{"News_ID":194,"NewsType_id":78}]}  


    这是我们将得到的json数据。


    2.需要引用的文件

     后台需要引入json类文件:  json.asp   ,  

     前台需要引入常用的文件: json2.js<mrak: 这个文件可以到json官网去下载> ,  jQuery.js<mark: 这个文件太常见了,不用我说了吧>  


    3.后台程序代码:(关键的来了)

    index_json.asp 页面代码:

    [plain] view plain copy print?

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>  

    <% Response.Addheader "Content-Type","text/html; charset=utf-8"  %>  

    <!--#include file="inc/json.asp"-->  

    <!--#include file="inc/Conn.asp" -->  

    <%  

       Dim sql_class,sql_top,sql_colums,sql_whereBy,sql_orderBy  

       sql_class = request.Item("sql_class")  

       sql_top = request.Item("sql_top")  

       sql_colums = request.Item("sql_colums")  

       sql_whereBy = request.Item("sql_whereBy")  

       sql_orderBy = request.Item("sql_orderBy")  

     

       Sql="select "&sql_top&" "&sql_colums&" from "&sql_class&" where 1=1 "&sql_whereBy&" "&sql_orderBy  

    %>  

     

    <%  

       Set Rs = Server.CreateObject("ADODB.Recordset")        

       Rs.Open sql,conn,1,3  

       jsonStr = ""  

       rows = ""  

     

       Dim i,json_rows,json_ret,arr_rows  

       Dim myArray()  

       Redim myArray(rs.recordcount-1) '将数组大小重新定义为20  

       Set jsonObj=New json  

       jsonObj.toResponse=False  

       Set json_ret = server.createobject("scripting.dictionary")          

       For i=0 To rs.recordcount-1  

           Set myArray(i) = server.createobject("scripting.dictionary")  

           For Each e In rs.Fields                  

                   'rows = rows &""""& e.Name & """:""" & replace(e.value,chr(34),"@_'_@") & ""","  

                   myArray(i).Add e.Name,e.value  '将key/value加到行数组对象中  

           Next    

           Rs.movenext  

       Next        

       json_ret.Add "total",rs.recordcount  

       json_ret.Add "rows",myArray  

       jsonStr = jsonObj.toJSON(Empty,json_ret,False)  

     

       response.Write jsonStr  

     

    %>  

    上面的代码是将数据库中的数据取出来并将数据保存为json对象,这里面用到了  dictionary ,目前还没有别的办法生成多层级的json数据,只能用它来生成了。 有人说我可以将数据库的数据取出来然后拼接成json数据格式。 对,没错,我也尝试过,但是你会发现,它生成的永远都是string字符串,不是对象,异步获取json格式或者将这个数据传给一些插件的时候你会发现你怎么也得不到想要的结果,原因就在于格式不正确,你得到的是json string,不是json object。 那又有人说了,我可以在异步获取到这个json string之后再将该数据用eval方法转成json对象,对,没错,是可以。 弊端是有的,而且你会发现很头疼的。 这个问题在稍后的文章里面我会再来解释。


    4.接下来我们要做的就是将生成的json对象数据异步获取并显示到前台的dom中,看一下demo:

    文件名 ajaxShow.html

    [html] view plain copy print?

    <!DOCTYPE html>  

    <html lang="zh-cn">  

    <head>  

       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  

       <meta http-equiv="X-UA-Compatible" content="IE=edge" />  

       <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalabel=no" />  

       <meta name="renderer" content="webkit" />  

       <script type="text/javascript" src="js/json2.js"></script>  

       <script type="text/javascript" src="js/jquery.js"></script>  

       <style type="text/css">  

           body  

           {  

               min-width: 1020px;  

               font-size: 14px;  

               background: #fff;  

               font-family: "微软雅黑" ,Microsoft Yahei;  

               background: #000;  

               padding:20px;  

               margin:20px;  

           }  

           .tips  

           {  

               margin:20px;  

               width: 50%;  

               height: auto;  

               margin: 10px auto;  

               border: 1px solid #fff;  

               padding: 20px 5px;  

               font-size: 16px;  

               color: #fefefe;  

               background: rbga(220,220,220,0.8);  

               word-wrap:break-word;  

           }  

           .text-center{ text-align:center}  

           .min-height{ min-height:300px; }  

           .radius  

           {              

               border-radius:5px;  

               }  

           .font-blue  

           {  

               color: #034C9A;  

           }  

       </style>  

       <script type="text/javascript">  

           var url = "http://localhost:701/index_json.asp"  

           var relations = {  

               sql_class: "Web_News", //表名  

               sql_top: "",  //取数据总条数 top 10  

               sql_colums: "News_ID,NewsType_id", //列名,用","隔开,如果全部获取,则填写"*"  

               sql_whereBy: "and NewsType_id=78",  

               sql_orderBy: "order by News_ID asc"  

           }  

           $.post(  

               url,  

           relations,  

               function (data) {  

                   $('#ajax_data').html(JSON.stringify(data));  

                   var total = data.total;  

                   //$('#ajax_data').html(total);  

               }  

           , "json"  

           );  

     

               function strToJson(str) {  

                   var json = eval('(' + str + ')');  

                   return json;  

               }  

       </script>  

    </head>  

    <body>  

         

       <div id="header" class="tips radius text-center">  

           <b>asp生成json对象并异步获取json对象数据 实例</b>  

       </div>  

       <div id="Div1" class="tips radius">  

           以下将显示异步获取的内容:  

       </div>  

       <div id="ajax_data" class="tips radius min-height">  

       </div>  

    </body>  

    </html>  

    文件的引用和css我就不说了。关键在于ajax部分,这里我用的是jquery中的$.post()方法,有2出关键点: 第一, url ,相信这个大家都会写对吧,就是你请求的数据源页面,我们的例子中为刚才我们建立的 ajax_index.asp; 第二, 'json',这个参数大家可以查一下jquery关于ajax异步获取部分的手册。该参数就是为了保证生成的数据为json对象。

    其中你会发现

    [html] view plain copy print?

    JSON.stringify(data)  

    这个就是json2.js  json类文件中的方法,该方法就是将json对象转为string类型,以便将结果显示到dom里面。 运行一下http://localhost:701/ajaxShow.html,是不是已经得到了我们想要的数据。


    这是我们全部的数据,当然我们怎么知道我们获取的是json对象呢,只需要试试data.total能不能获取到就知道了啦;我们改一下$.post()中的代码:

    [javascript] view plain copy print?

    //$('#ajax_data').html(JSON.stringify(data));  

                   var total = data.total;  

                   $('#ajax_data').html(total);  

    在刷新一下看看,是不是得到了 17;



    哈哈,果然是得到啦  !  好了,该介绍的就介绍完了,关于问什么不用拼接的方法得到json格式的字符串,期待下一篇文章。

    代码下载

    http://blog.csdn.net/zxhj963/article/details/50912296

    ASP 如何获取JSON 数据!

    <script language="JScript" runat="Server">

    function toObject(json) {

       eval("var o=" + json);

       return o;

    }

    function toArray(s){

       var dic = Server.CreateObject("Scripting.Dictionary")

       eval("var a=" + json);

       for(var i=0;i<a.length;i++){

           var obj = Server.CreateObject("Scripting.Dictionary")

           for(x in a[i]) obj.Add(x,a[i][x])

           dic.Add(i, obj);

       }

       return dic

    }

    </script>

    <%


    Dim json

    json ="[{'uid':'1','username':'abc','email':'123@163.com'},{'uid':'2','username':'dbc','email':'456@163.com'}]"

    Set json = toArray(json)

    For i=0 To json.Count-1

     Response.Write json(i)("uid") & " <br/>"

     Response.Write json(i)("username") & " <br/>"

     Response.Write json(i)("email") & " <br/>"

    Next

    Set json = Nothing

    %>

    http://bbs.csdn.net/topics/390729047/

    在ASP程序中打印Excel表格的新方法

    在ASP程序中打印Excel报表的新方法

    目前,B/S模式(浏览器/服务器模式)成为企业网上首选的计算模式。由于B/S模式的特殊性,在C/S下相对较易实现的Excel报表打印功能在B/S下却成为一个难点。本人通过研究写了一个基于ASP程序的打印Excel报表的程序。本程序的特点是无须任何组件。

    Print.asp

    ------------------------------------------------

    <html><title>打印Excel报表</title>

    <%

    '控制脚本语言

    response.write"<script language="&"VBScript"&">"

    %>

    //*****************本程序由火星工作室提供(andy2001p@hotmail.com)******************

    //*******************版权所有 随意拷贝********************************

    function ccprint()

    Set xlApp = CreateObject("EXCEL.APPLICATION")

    //打开工作表!

    Set xlBook = xlApp.Workbooks.Open("c:book1.xlt")

    set xlsheet1 = xlBook.ActiveSheet

    <% db="zhk.mdb"

    Set conn = Server.CreateObject("ADODB.Connection")

    connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")

    conn.Open connstr

    set rsd=server.createobject("adodb.recordset")

    str="select * from cjb00"

    rsd.open str,conn

    ii=1

    do while not rsd.eof and ii<11

    %>

    <%response.write"xlSheet1.cells("&ii+4&",2).value="%>"<%=rsd("姓名")%>"

    <%response.write"xlSheet1.cells("&ii+4&",3).value="%>"<%=rsd("学号")%>"

    <%

    rsd.movenext

    ii=ii+1

    loop

    rsd.close

    set rsd=nothing

    %>

    xlSheet1.Application.Visible = True

    end function

    //*****************本程序由火星工作室提供******************

    <%

    response.write"</script>"

    %>

    <html><title>打印Excel报表</title>

    <body>

    <center>

    <h2><font color=red>学生表(Demo)</font></h2>

    <p>&nbsp;</p>

    <form name="fmp" method="post" action="">

    <%

    db="zhk.mdb"

    Set conn = Server.CreateObject("ADODB.Connection")

    connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")

    conn.Open connstr

    set rsd=server.createobject("adodb.recordset")

    str="select * from cjb00"

    rsd.open str,conn

    %>

    <table width="396" height="58" border="1" bordercolor="#00FF00" bgcolor=lightyellow>

    <tr bgcolor=deepskyblue>

    <th><b>姓名</b></th>

    <th><b>学号</b></th>

    </tr>

    <%

    do while not rsd.eof

    %>

    <tr align=center>

    <td> <%=rsd("姓名")%>

    </td>

    <td> <%=rsd("学号")%>

    </td>

    </tr>

    <%

    rsd.MoveNext

    loop

    %>

    <% rsd.close

    set rsd=nothing

    conn.close

    set cnn=nothing %>

    </table>

    <p>

    <input name="Submit2" type="button" onclick="ccprint()" onDblClick="ccprint()" value="打印">

    <br>

    </p>

    </form>

    </center>

    </body>

    </html>

    asp 读取 json 列表解决思路

    怎么用asp程序读取URL再用程序读取出结果,求完整ASP程序

    ------解决方案--------------------

    原来不是发过了?知识变成数组了而且,方法都差不多http://bbs.csdn.net/topics/390776429

    <script runat="server" language="jscript">

    function getJSON(v) { return eval('(' + v + ')'); }

    function toArray(a) {//JSON对象数组格式的字符串

    var dic = Server.CreateObject("Scripting.Dictionary");

    for (var i = 0; i < a.length; i++) {

    var obj = Server.CreateObject("Scripting.Dictionary");

    for (x in a[i]) obj.Add(x, a[i][x]);

    dic.Add(i, obj);

    }

    return dic;

    }

    </script>

    <%

    '==================================================

    '从2进制数据流生成内容

    '==================================================

    Function BytesToBstr(strBody,CodeBase)

    dim obj

    set obj=Server.CreateObject("Adodb.Stream")

    obj.Type=1

    obj.Mode=3

    obj.Open

    obj.Write strBody

    obj.Position=0

    obj.Type=2

    obj.Charset=CodeBase

    BytesToBstr=obj.ReadText

    obj.Close

    set obj=nothing

    End Function

    function downpage(url)

    set xhr=server.CreateObject("microsoft.xmlhttp")

    xhr.open "get",url,false

    xhr.send

    downpage=BytesToBstr(xhr.responsebody,"gb2312")'注意你那个页面的编码,要不可能出乱码

    end function

    's改为用Microsoft.XMLHTTP动态获取

    's=downpage("http://www.xxx.com/?no=710000")

    s="{""resultcode"":""200"",""reason"":""Return Successd"",""result"":[{""id"":""1"",""province"":""陕西省"",""city"":""西安市"",""area"":""灞桥区"",""address"":""狄寨镇南寨村""},{""id"":""2"",""province"":""陕西省"",""city"":""西安市"",""area"":""灞桥区"",""address"":""狄寨镇潘村""}

    ,{""id"":""3"",""province"":""陕西省"",""city"":""西安市"",""area"":""灞桥区"",""address"":""狄寨镇伍坊村""}],""error_code"":0}"

    set o=getJSON(s)

    if o.resultcode="200" then

    set result=toArray(o.result)

    for i=0 to result.count-1

    response.Write result(i)("province")&"-"&result(i)("address")&"<br/>"

    next

    set result=nothing

    end if

    set o=nothing

    %>

    http://www.ynpxrz.com/n822328c2023.aspx

    ASP生成JSON数据

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>

    <!--#include file="json.asp"-->

    <!--#include file="inc/Conn.asp" -->

    <%

    response.ContentType="text/json"

    dim j


    '多重嵌套的JSON,要使用Dictionary才能实现

    set j=new json

    j.toResponse=false

    set r=server.createobject("scripting.dictionary")

    set b=server.createobject("scripting.dictionary")

    set c=server.createobject("scripting.dictionary")

    c.add "x",5

    c.add "y",6

    c.add "z",11

    b.add "event","Mouse Click"

    b.add "data",c

    r.add "success",true

    r.add "result",b

    a=j.toJSON(empty,r,false)

    response.write a


    '记录集转为Json

    set i=new json

    i.toresponse=false

    set rs=server.CreateObject("adodb.recordset")

    sqlstr="select top 5 * from producttype"

    rs.open sqlstr,conn,0,1

    v=i.toJson("result",rs,false)

    rs.close

    response.write v

    %>


    面要注意的是:

    1,嵌套的JSON是要用DICTIONARY来生成的,其他的方法,我还没有找到

    2,最终的结果在输出时,可以用toJson(empty,r,false)这种形式,这样,生成的JSON,就不会类似{var:{var1:'',var2:''}}这种形式,而是直接的:{var1:'',var2:''},这种格式在我们用来处理表单,返回数据时,一定要注意

    3,生成JSON的ASP页面,输出格式,解析JSON的JS文件,HTML页面,必须全是UTF-8格式编码,一个环节编码不正确,就会导致接收到的JSON在显示中文时变乱码

    http://www.cnblogs.com/Heroman/archive/2008/07/28/1254373.html

    ASP图片格式与base64数据互转方法

    ASP图片格式与base64数据相互转换的方法,经常用于处理表单中存储有base64字符串格式的图片。

    获取到base64数据,转换成图片


    复制代码

    <%

    Subfolder=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now()) ''生成当天的子文件夹的名称

    picture=Trim(request.Form("urls"))

    picture=replace(picture,"data:image/png;base64,","")

    path=Subfolder&".jpg"

    xmlstr="<data>"&picture&"</data>"

    Dim xml : Set xml=Server.CreateObject("MSXML2.DOMDocument")

    Dim stm : Set stm=Server.CreateObject("ADODB.Stream")

    xml.resolveExternals=False

    xml.loadxml(xmlstr)

    xml.documentElement.setAttribute "xmlns:dt","urn:schemas-microsoft-com:datatypes"

    xml.documentElement.dataType = "bin.base64"

    stm.Type=1 'adTypeBinary

    stm.Open

    stm.Write xml.documentElement.nodeTypedValue

    stm.SaveToFile Server.MapPath(path)

    stm.Close

    Set xml=Nothing

    Set stm=Nothing

    response.Write("http://codeo.cn/"&path)

    %>

    图片转换为Base64字符串方法

    <%

    Function ImagesToBase64(FileName)

    Dim xml

    Dim root

    Dim fs

    Dim FilePath

    Dim objStream

    Dim objXMLDoc

    Dim Base64

    ''定义变量完结

    '创建对像

    FilePath=Server.MapPath(FileName)

    getFileExt = Mid(FilePath, InstrRev(FilePath, ".") + 1)


    Set objXMLDoc=Server.CreateObject("msxml2.FreeThreadedDOMDocument")

       '设定生成XML文档的根为 Base64Data

       objXMLDoc.loadXML "<?xml version='1.0'?><Base64Data />"


    Set fs = Server.createObject("Scripting.FileSystemObject") ''服务器需要FSO组件

    If fs.FileExists(FilePath) Then '判断File文件是否存在

       '用 stream 来读取数据

       Set objStream = Server.CreateObject("ADODB.Stream")

       objStream.Type = 1

       objStream.Open

       objStream.LoadFromFile FilePath


       objXMLDoc.documentElement.dataType = "bin.base64"

       objXMLDoc.documentElement.nodeTypedvalue = objStream.Read

       '数据流读取结束.得到了值 objXMLDoc

       '创建XML文件

             Set xml = Server.CreateObject("msxml2.FreeThreadedDOMDocument")

             xml.load objXMLDoc

             If xml.ReadyState>2 Then

               Set root=xml.getElementsByTagName("Base64Data")

               Base64=""

             else

               Base64=""

             End If

             Set xml=Nothing

       Set objStream=Nothing

    else

               Base64=""

    End If


    Set fs=Nothing

    Set objXMLDoc=Nothing


    ImagesToBase64=Base64


    End Function

    %>


    <%

    '测试时同文件夹应该包含该图片文件。

    response.Write ImagesToBase64("12.jpg")

    %>

    如果青春的时光在闲散中度过,那么回忆岁月将会是一场凄凉的悲剧。

    如果青春的时光在闲散中度过,那么回忆岁月将会是一场凄凉的悲剧。

    你对上进心的理解是人性的贪婪吗? 殊途同归

    时间是生命中最宝贵的财富,实在是磋砣不起。

    调用由ASP动态生成的JS文件

    JavaScript很强大,但是js文件却不能接受get方法或post方法传过来的参数,而ASP可以很好的支持这点,那么可以用ASP来接收传递过来的参数再动态生成JS代码,那么两种强大的功能就结合在一起了.


    服务器上的ASP文件:mail_t.asp


    <%

    uid=request.QueryString("uid")

    if(uid<>"") then

    'response.write "<script>"

    response.write "alert('tmail.js调用成功,uid为:"

    response.write uid&"')"

    'response.write "</script>"

    end if

    %>




    客户机器上的文件:1.htm


    <script src=http://10.1.1.196:8080/mail_t.asp?uid=1></script>;


    客户机上表面上是访问一个ASP的网页,实际上是调用一个由ASP生成的JS代码,而ASP网页生成什么样的代码又可以由客户机器上uid的参数决定


    具有提示窗口的百度地图代码

    <style type="text/css">

       html,body{margin:0;padding:0;}

       .iw_poi_title {color:#CC5522;font-size:14px;font-weight:bold;overflow:hidden;padding-right:13px;white-space:nowrap}

       .iw_poi_content {font:12px arial,sans-serif;overflow:visible;padding-top:4px;white-space:-moz-pre-wrap;word-wrap:break-word}

    </style>

    <script type="text/javascript" src="http://api.map.baidu.com/api?key=&v=1.1&services=true"></script>

    <!--百度地图容器-->

     <div style="width:1135px;height:460px;border:#ccc solid 1px;" id="dituContent"></div>


    <script type="text/javascript">

       //创建和初始化地图函数:

       function initMap(){

           createMap();//创建地图

           setMapEvent();//设置地图事件

           addMapControl();//向地图添加控件

           addMarker();//向地图中添加marker

       }

       

       //创建地图函数:

       function createMap(){

           var map = new BMap.Map("dituContent");//在百度地图容器中创建一个地图

           var point = new BMap.Point(130.333929,37.39939);//定义一个中心点坐标

           map.centerAndZoom(point,16);//设定地图的中心点和坐标并将地图显示在地图容器中

           window.map = map;//将map变量存储在全局

       }

       

       //地图事件设置函数:

       function setMapEvent(){

           map.enableDragging();//启用地图拖拽事件,默认启用(可不写)

           //map.enableScrollWheelZoom();//启用地图滚轮放大缩小

           map.enableDoubleClickZoom();//启用鼠标双击放大,默认启用(可不写)

           map.enableKeyboard();//启用键盘上下左右键移动地图

       }

       

       //地图控件添加函数:

       function addMapControl(){

           //向地图中添加缩放控件

    var ctrl_nav = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT,type:BMAP_NAVIGATION_CONTROL_LARGE});

    map.addControl(ctrl_nav);

                   //向地图中添加比例尺控件

    var ctrl_sca = new BMap.ScaleControl({anchor:BMAP_ANCHOR_BOTTOM_LEFT});

    map.addControl(ctrl_sca);

       }

       

       //标注点数组

       var markerArr = [{title:"智冠宝",content:"地址:山东省德州市<br/>电话:123456789 ",point:"130.333929|37.39939",isOpen:1,icon:{w:23,h:25,l:46,t:21,x:9,lb:12}}

    ];

       //创建marker

       function addMarker(){

           for(var i=0;i<markerArr.length;i++){

               var json = markerArr[i];

               var p0 = json.point.split("|")[0];

               var p1 = json.point.split("|")[1];

               var point = new BMap.Point(p0,p1);

    var iconImg = createIcon(json.icon);

               var marker = new BMap.Marker(point,{icon:iconImg});

    var iw = createInfoWindow(i);

    var label = new BMap.Label(json.title,{"offset":new BMap.Size(json.icon.lb-json.icon.x+10,-20)});

    marker.setLabel(label);

               map.addOverlay(marker);

               label.setStyle({

                           borderColor:"#808080",

                           color:"#333",

                           cursor:"pointer"

               });


    (function(){

    var index = i;

    var _iw = createInfoWindow(i);

    var _marker = marker;

    _marker.addEventListener("click",function(){

       this.openInfoWindow(_iw);

       });

       _iw.addEventListener("open",function(){

       _marker.getLabel().hide();

       })

       _iw.addEventListener("close",function(){

       _marker.getLabel().show();

       })

    label.addEventListener("click",function(){

       _marker.openInfoWindow(_iw);

       })

    if(!!json.isOpen){

    label.hide();

    _marker.openInfoWindow(_iw);

    }

    })()

           }

       }

       //创建InfoWindow

       function createInfoWindow(i){

           var json = markerArr[i];

           var iw = new BMap.InfoWindow("<b class='iw_poi_title' title='" + json.title + "'>" + json.title + "</b><div class='iw_poi_content'>"+json.content+"</div>");

           return iw;

       }

       //创建一个Icon

       function createIcon(json){

           var icon = new BMap.Icon("http://app.baidu.com/map/images/us_mk_icon.png", new BMap.Size(json.w,json.h),{imageOffset: new BMap.Size(-json.l,-json.t),infoWindowOffset:new BMap.Size(json.lb+5,1),offset:new BMap.Size(json.x,json.h)})

           return icon;

       }

       

       initMap();//创建和初始化地图

    </script>

     1 23 :

    Powered By 智冠宝 Build 140901

    Copyright 智冠云端网络 Some Rights Reserved.