这几天把项目中用到的ajaxpro方法学习总结了一下,也参考了网上的一些资料

一、简介

  ajax(asynchronose javascript+xml)应用可以仅向服务器发送并取回必需的数据,它使的

SOAP或其他基于XML的web service接口,并在客户端采用javascript处理来自服务器的响应。

因为在服务器和浏览器之间交找的数据大量减少,结果我们就能看到响应更快的应用。同时处理工作可以发出请求的客户端机器上完成,所以web服务器的处理时间也减少了。

  Ajax应用程序的优势在于:

1通过异步模式,提升了用户体验

2优化了浏览器和服务器之间的传输,减少了不必要的数据往返,减少了带宽的占用

3Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载

二、配置

Ajax.net有AjaxPro.dll和Ajax.dll两个版本,这两个版本在使用上虽然差不多,但还是有区别的,主要的区别如下:

web.config配置文件不一样

(1)web.config配置文件不一样

ajax.dll的配置文件的写法为

<add verb="post,get" path="ajax/*.ashx" type="ajax.pagehanderfactory,ajax"/>

ajaxpro.dll的醋置文件写法为

<add verb="*" path='ajaxpro/*.ashx" type="ajaxpro.ajaxhanderfactory,ajaxpro"/>

(2)调用服务器方法的时候方式 不一样,很多朋友就是因为这个原因,发现命名空间找不到或者对象未定义

调用ajax.dll的时候调用服务器方法不要加命名空间

应用ajaxpro.dll的时候,调用服务器方法需要加命名空间

ajax.dll为

var response=Web.GetServermethod();

alert(response.value);

ajaxpro.dll为

var response=web.test.getserverMethod();

alert(response.value);

三、使用步骤

1,首先下载ajaxpro组件。并将ajaxpro.dll引用到网站

修改webconfig。在<system.web>元素中添加以下代码

 <httpHandlers>
<add path="ajaxpro/*.ashx" verb="POST,GET" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>/*这里就是注册的代码*/
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpHandlers>

 

3对ajaxpro在页page_load事件中进行运行注册。如

protected void Page_Load(object sender, EventArgs e)
{
Response.Expires = -1;//清除页面缓存
AjaxPro.Utility.RegisterTypeForAjax(typeof(ZHGL_KHListAddandEdit));//将此后台页面类,注册到前台
if (!this.IsPostBack)
{

}
}

4服务器方法的注册

[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]
//或者[AjaxPro.AjaxMethod()]
public DataTable DataBingCity(string prcID)
{
return DBUtility.DbHelperSQL.Query("select * from GG_City where ProvinceID=" + prcID + "").Tables[0];
}

用户页面js调用

//省市二级联动
function GetCity(prcID) {
form1.ddlCity.length = 1;
var rsl = InvestCallSys.SeatMange.ZHGL_KHListAddandEdit.DataBingCity(prcID).value;//写上完整的引用空间+类名+服务器端注册函数
if (rsl != null && typeof (rsl) == "object") {
for (var i = 0; i < rsl.Rows.length; i++) {
op = new Option(rsl.Rows[i]["Name"], rsl.Rows[i]["Name"]);
form1.ddlCity.options.add(op);
}
}
}


目前项目中用到最多的就是这种形式,之前还有一种是ExtJs方法,这是他们的官方网站http://extjs.org.cn/ 

写到这里我们再来看一下silverlight中,后台程序是如何和前台js互相操作的

public Container()
{
InitializeComponent();
VarList.Container = this;
txtWidth.Text = this.container.Width.ToString();
txtHeight.Text = this.container.Height.ToString();
HtmlPage.RegisterScriptableObject("xml", this);//注册一个可以被脚本调用的当前页面的对象实例
if (HtmlPage.Window.GetProperty("GetValue") != null)//检验页面脚本是否存在该scripobject对象
HtmlPage.Window.Invoke("GetValue");
Application.Current.Host.Content.FullScreenChanged += new EventHandler(Content_FullScreenChanged);
}

这是一个xaml页面加载时候实例化事件

这里的htmlpage是一个静态类(允许访问和操作浏览器的文档对象模型(DOM)不同与(BOM浏览器对象模型)嘿嘿

这个类中可以将当前类注册到前台,取名为xml

这里跟ajaxpro类似,还需要将你要调用的后台方法前加属性

[ScriptableMember]
public void SetNameAndXml(string xml)
{
if (!string.IsNullOrEmpty(HtmlPage.Document.QueryString["wfName"]))
wfname = HttpUtility.UrlDecode(HtmlPage.Document.QueryString["wfName"]);
if (!string.IsNullOrEmpty(HtmlPage.Document.QueryString["wfEntity"]))
_entitycode = HtmlPage.Document.QueryString["wfEntity"];
inputxml(xml);
}

然后前台页面调用

function GetValue() {
var xaml = $get('Xaml1'); //window.dialogArguments.getxml()
xaml.content.xml.SetNameAndXml(window.dialogArguments.getxml());
}


 


 

 

posted on 2012-03-14 09:19  tnspop  阅读(5740)  评论(0编辑  收藏  举报