ajaxpro用法小結


這幾天把項目中用到的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());
}


 


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM