انجمن‌های فارس وب

نسخه کامل: Ajax
شما در حال بازدید از بایگانی ارسال های انجمن هستید این نسخه کامل نیست : برای مشاهده نسخه کامل اینجا کلیک کنید
استفاده از callback feature
با استفاده از callback feature ميتوان بدون refresh شدن صفحه بوسيله اسكريپت سمت كاربر متغير و يا مقاديري را به صورت asynchronous به سرور فرستاد و پاسخ ارسال شده بوسيله كد سمت كاربر (در اينجا java script) نمايش داده شود.
براي تمرين يك صفحه كه روي آن يك "HTML botton"  و يك "TextBox server control" قرار دارد ايجاد كنيد. مي‌خواهيم وقتي كاربر روي دكمه كليك مي‌كند سرويس callback‌ آغاز شده و يك عدد تصادفي را در TextBox نمايش دهد.

.aspx page (VB version)
<%@ Page Language=”VB” AutoEventWireup=”false” CodeFile=”RandomNumber.aspx.vb”
Inherits=”RandomNumber” %>
<html xmlns=”http://www.w3.org/1999/xhtml” >
<head runat=”server”>
<title>Callback Page</title>
<script type=”text/javascript”>
function GetNumber(){
UseCallback();
}
function GetRandomNumberFromServer(TextBox1, context){
document.forms[0].TextBox1.value = TextBox1;
}
</script>
</head>
<body>
<form id=”form1” runat=”server”>
<div>
<input id=”Button1” type=”button” value=”Get Random Number”
onclick=”GetNumber()” />
<br />
<br />
<asp:TextBox ID=”TextBox1” Runat=”server”></asp:TextBox>
</div>
</form>
</body>
</html>
VB (code-behind)

Partial Class RandomNumber
Inherits System.Web.UI.Page
Implements System.Web.UI.ICallbackEventHandler
Dim _callbackResult As String = Nothing;
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Dim cbReference As String = Page.ClientScript.GetCallbackEventReference(
Me, “arg”, “GetRandomNumberFromServer”, “context”)
Dim cbScript As String = “function UseCallback(arg, context)” & _
“{“ & cbReference & “;” & “}”
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), _
“UseCallback”, cbScript, True)
End Sub
Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _
Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
_callbackResult = Rnd().ToString()
End Function
Public Function GetCallbackResult() As String _
Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
Return _callbackResult
End Function
End Class


وقتي اين صفحه ساخته مي‌شود و در مرورگر اجرا مي‌گردد، نتيجه مانند شكل زير خواهد بود.




با نگاهي به صفحه aspx. متوجه ميشويد كه از يك <input type="button"> استفاده كرده‌ايم نه از يك <asp: button> و به همين دليل است كه با كليك بر روي اين دكمه refresh صورت نمي‌گيرد. تنها كاري كه بايد انجام گيرد اين است كه رويداد onclick مربوط به دكمه را به تابع جاوا اسكريپي كه كل پردازش را آغاز مي‌كند تيظيم كند:

<input id=”Button1” type=”button” value=”Get Random Number”
onclick=”GetNumber()” />

حالا نوبت به كدهاي جاوا اسكريپت ميرسد.() GetNumber  اولين تابع جاوا اسكريپت است كه كل پردازش را با فراخواني نام "client script handler" كه در صفحه code behind تعيين شده است، آغاز ميكند.

() GetNumber يك رشته را بوسيله تابع GetRandomNumberFromServer ميگيرد. تنها كاري كه GetRandomNumberFromServer انجام ميدهد اين است كه مقدار رشته گرفته شده را ميگيرد و آن را داخل TextBox نمايش ميدهد:

<script type=”text/javascript”>
function GetNumber(){
UseCallback();
}
function GetRandomNumberFromServer(TextBox1, context){
ASP.NET Server Controls and Client-Side Scripts
document.forms[0].TextBox1.value = TextBox1;
}
</script>

حالا به code behind توجه كنيد. كلاس page از رابط System.Web.UI.ICallbackEventHandler استفاده ميكند.

Partial Class RandomNumber
Inherits System.Web.UI.Page
Implements System.Web.UI.ICallbackEventHandler
‘ Code here
End Class

اين رابط شما را ملزم به استفاده از دو متد ميكند. RaiseCallbackEvent  و GetCallbackResult  كه هر دو با درخواست‌هاي  اسكريپ سمت كاربر كار ميكنند.

RaiseCallbackEvent  شما را قادر ميسازد كه كار گرفتن مقادير از صفحه را انجام دهيد، اما اين مقادير فقط ميتوانند از نوع رشته"string" باشند:

Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _
Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
_callbackResult = Rnd().ToString()
End Function



GetCallbackResult  در واقع  متدي است كه مقدار برگشتي را براي استفاده ميگيرد:

Public Function GetCallbackResult() As String _
Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
Return _callbackResult
End Function

رويداد page_load كار ايجاد و قرار دادن client callback script manager كه تابعي است براي درخواست‌ها و پاسخ‌ها را مديريت ميكند را نيز انجام ميدهد:

Dim cbReference As String = Page.GetCallbackEventReference(Me, “arg”, _
“GetRandomNumberFromServer”, “context”)
Dim cbScript As String = “function UseCallback(arg, context)” & _
“{“ & cbReference & “;” & “}”
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), _
“UseCallback”, cbScript, True)

بسیار عالی ! قطعا" ASP طرفداران خاص خودش رو داره ، چیزی به ذهنم رسید در مورد تلفظ Ajax که اغلب به اشتباه " آژاکس" تلفظ می کنن ، که صحیحش "ای ژکس" یا ey-jax هستش .
مرجع آدرس ها