前言:
经过2天的学习,基本上掌握了javascript和json和ajax,下面我将搭建一个很不规范的REST框架,为web2.0开放api做准备。
正文:
1 下载:json.js,Newtonsoft.Json.dll
2 自己写一个ajax.js
function CreateAjaxRequest() {
var req;
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
return req;
}
var req;
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
return req;
}
3.添加一个IHttpHandler,作为REST的数据源,他的输出符合Json规范,大概意思很简单,从传入的参数里面获取变量,然后查数据库取得datatable,最后经过json的序列化返回response。
Code
4.在web.config里面注册这个handler
<add verb="GET" path="REST.do" type="RESThandler,App_Code"/>
因为我的handler在web项目里面写的,所以type的dll引用了App_Code
5.写一个REST_product_preload.js,目的是动态导入需要使用的ajax.js/json.js,当然还有自己定义的css
//写下一个mark,被ajax填充
this.server = 'http://localhost:3652/Pixysoft.Web.CitiBox';
document.write('<span id="ajaxresponse"><p style="text-aligh:center;">Please wait</p></span>');
var usrdefaultcss = true;
if (typeof defaultcss == 'undefined')
{
usrdefaultcss = true;
}
else
{
usrdefaultcss = defaultcss;
}
if (usrdefaultcss)
LoadJsCssFile(this.server + '/App_Themes/REST/REST_product.css','css');
LoadJsCssFile(this.server + '/js/ajax/ajax.js','js');
LoadJsCssFile(this.server + '/js/json/json.js','js');
//动态加载css
function OnloadCss(href)
{
document.createStyleSheet(href);
}
//http://homepage.yesky.com/45/7728545.shtml
function LoadJsCssFile(filename, filetype)
{
if (filetype=="js")
{
//判断文件类型
var fileref=document.createElement('script')//创建标签
fileref.setAttribute("type","text/javascript")//定义属性type的值为text/javascript
fileref.setAttribute("src", filename)//文件的地址
}
else if (filetype=="css")
{
//判断文件类型
var fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
}
if (typeof fileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}
this.server = 'http://localhost:3652/Pixysoft.Web.CitiBox';
document.write('<span id="ajaxresponse"><p style="text-aligh:center;">Please wait</p></span>');
var usrdefaultcss = true;
if (typeof defaultcss == 'undefined')
{
usrdefaultcss = true;
}
else
{
usrdefaultcss = defaultcss;
}
if (usrdefaultcss)
LoadJsCssFile(this.server + '/App_Themes/REST/REST_product.css','css');
LoadJsCssFile(this.server + '/js/ajax/ajax.js','js');
LoadJsCssFile(this.server + '/js/json/json.js','js');
//动态加载css
function OnloadCss(href)
{
document.createStyleSheet(href);
}
//http://homepage.yesky.com/45/7728545.shtml
function LoadJsCssFile(filename, filetype)
{
if (filetype=="js")
{
//判断文件类型
var fileref=document.createElement('script')//创建标签
fileref.setAttribute("type","text/javascript")//定义属性type的值为text/javascript
fileref.setAttribute("src", filename)//文件的地址
}
else if (filetype=="css")
{
//判断文件类型
var fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
}
if (typeof fileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}
6.写一个REST_product.js,这个就是调用ajax读取handler的json数据,并且显示到页面。(我就被一个ajax问题搞了很久,终于发现通过写<span>,然后替换里面的span.htmltext就可以实现动态加载数据)
//获得数据
req = CreateAjaxRequest();
try
{
req.onreadystatechange = handleStateChange;
req.open("GET", 'REST.do?type=hotproduct&count='+productnumber, true);
req.send(null);
}
catch(exception)
{
alert("");
}
//取得数据,并且处理
function handleStateChange()
{
if(req.readyState == 4)
{
if (req.status == 200 || req.status == 0)
{
// 取得返回字符串
var resp = req.responseText;
// 构造返回JSON对象的方法
var json = resp.parseJSON();
//构造返回结果
// 显示返回结果
document.getElementById("ajaxresponse").innerHTML=GetProductResponse(json);
}
}
}
function GetProductResponse(json)
{
var retvalue='';
retvalue +='<div class="lstContent_product">';
retvalue+='<ul>';
for(i=0;i<json.length;i++)
{
retvalue+='<li>';
retvalue+='<p class="product_img">';
retvalue+='<a href="'+json[i].Url+'" title="'+json[i].Productname+'" target="_blank" >';
retvalue+='<img src='+json[i].Imgurl+' alt="" />';
retvalue+='</a>';
retvalue+='</p>';
retvalue+='<p class="product_name">';
retvalue+='<a href="'+json[i].Url+'" title="'+json[i].Productname+'" target="_blank" >'+json[i].Productname+'</a>';
retvalue+='</p>';
retvalue+='<p class="product_retailprice">';
retvalue+='零售价 ¥'+json[i].Price+'';
retvalue+='</p>';
retvalue+='<p class="product_lotprice">';
retvalue+='批发价: [登录问价]</p>';
retvalue+='</li>';
}
retvalue+='</ul>';
retvalue +='</div>';
return retvalue;
}
req = CreateAjaxRequest();
try
{
req.onreadystatechange = handleStateChange;
req.open("GET", 'REST.do?type=hotproduct&count='+productnumber, true);
req.send(null);
}
catch(exception)
{
alert("");
}
//取得数据,并且处理
function handleStateChange()
{
if(req.readyState == 4)
{
if (req.status == 200 || req.status == 0)
{
// 取得返回字符串
var resp = req.responseText;
// 构造返回JSON对象的方法
var json = resp.parseJSON();
//构造返回结果
// 显示返回结果
document.getElementById("ajaxresponse").innerHTML=GetProductResponse(json);
}
}
}
function GetProductResponse(json)
{
var retvalue='';
retvalue +='<div class="lstContent_product">';
retvalue+='<ul>';
for(i=0;i<json.length;i++)
{
retvalue+='<li>';
retvalue+='<p class="product_img">';
retvalue+='<a href="'+json[i].Url+'" title="'+json[i].Productname+'" target="_blank" >';
retvalue+='<img src='+json[i].Imgurl+' alt="" />';
retvalue+='</a>';
retvalue+='</p>';
retvalue+='<p class="product_name">';
retvalue+='<a href="'+json[i].Url+'" title="'+json[i].Productname+'" target="_blank" >'+json[i].Productname+'</a>';
retvalue+='</p>';
retvalue+='<p class="product_retailprice">';
retvalue+='零售价 ¥'+json[i].Price+'';
retvalue+='</p>';
retvalue+='<p class="product_lotprice">';
retvalue+='批发价: [登录问价]</p>';
retvalue+='</li>';
}
retvalue+='</ul>';
retvalue +='</div>';
return retvalue;
}
7. 新建一个html页面,输入一下代码:
<html>
<head>
</head>
<body>
My Hot Product!
<script language="javascript">
productnumber=4;defaultcss=true;</script>
<script language="javascript" type="text/javascript" src="js/REST/REST_product_preload.js">
</script>
<script language="javascript" type="text/javascript" src="js/REST/REST_product.js">
</script>
</body>
</html>
<head>
</head>
<body>
My Hot Product!
<script language="javascript">
productnumber=4;defaultcss=true;</script>
<script language="javascript" type="text/javascript" src="js/REST/REST_product_preload.js">
</script>
<script language="javascript" type="text/javascript" src="js/REST/REST_product.js">
</script>
</body>
</html>
后记:
本REST框架需要ajax、json背景知识,引用了json.js,json.net类库
本REST例子无法正常运行,紧紧作为一个思路。如果需要正常运行,还需要我们公司自己的框架。当然经过合理的修改是可以正常运行的。