در این اموزش قصد داریم با استفاده از کدهای جاوااسکریپت نام کاربری که توسط کاربر وارد شده است را به سرور انتقال دهیم و سپس مجاز یا غیر مجاز بودن نام کاربری را بصورت پیغامی نمایش دهیم. دقت کنید تمام این مراحل از طریق درخواست بصورت ایجکس انجام خواهد شد .
-پس از ایجاد کنترلر بنام Home و افزودن فایلهای بوت استرپ و jquery کنترلر Home را بصورت زیر ویرایش کنید.
public ActionResult Index()
{
return View();
}
public ActionResult receiveDataAction()
{
System.Threading.Thread.Sleep(3000);
string Username = Request.QueryString["Username"];
string[] str = { "mohammad", "Ali", "Reza" };
if (str.Contains(Username))
{
return Json(1, JsonRequestBehavior.AllowGet);
}
else
{
return Json(0, JsonRequestBehavior.AllowGet);
}
}
اکشن index بعنوان صفحه آغازین پروژه ما می باشد . ویوی متناظر با ان را بصورت زیر ویرایش کنید.
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
<link href="~/Content/mycss.css" rel="stylesheet" />
</head>
<body>
<script type="text/javascript">
//www.fekre-bekr.ir
//telegrame:learningprograming
var http = null;
function CreateObject() {
if(typeof(XMLHttpRequest) !=undefined)
{
http = new XMLHttpRequest();//op fir chr ie+7
}
else
{
http = new ActiveXObject("Microsoft.XMLHTTP");//ie6--
}
}
function sendData() {
document.getElementById('gif').style.display = 'block';
var element = document.getElementById("gif");
element.classList.add("load");
document.getElementById('gif').innerHTML = "";
CreateObject();
http.open("POST", "/Home/receiveDataAction?Username=" + document.getElementById("Username").value, true);
http.onreadystatechange = getData;
http.send(null);
}
function getData(e)
{
if (http.readyState == 4) {
var result = http.response;
if (result == 1)
{
document.getElementById('gif').innerHTML = "مجاز است";
var element = document.getElementById('gif');
var remove_class = 'load';
element.className = element.className.replace(' ' + remove_class, '').replace(remove_class, '');
}
else
{
document.getElementById('gif').innerHTML = "مجاز نمی باشد";
var element = document.getElementById('gif');
var remove_class = 'load';
element.className = element.className.replace(' ' + remove_class, '').replace(remove_class, '');
}
}
}
</script>
<div class="container">
<div class="row">
<form id="MYFORM">
<input type="text" id="Username" class="form-control"/>
<br />
<div style="display:none" id="gif" class="load"></div>
<button type="button" onclick="sendData()">senddata</button>
</form>
</div>
</div>
<script src="~/Scripts/jquery-1.9.1.js"></script>
<script src="~/Scripts/bootstrap.min.js"></script>
</body>
</html>
در این صفحه از دکمه ی senddata جهت ارسال نام کاربری به سمت سرور استفاده خواهیم کرد.
ارسال نام کاربری با استفاده از شیئی از XMLHttpRequest بصورت غیر همزمان و بدون refresh شدن صفحه انجام میشود.
اگر به رویداد کلیک button نگاهی بیاندازید در رویداد کلیک آن تابع sendData اجرا خواهد شد.
ما در این برنامه برای اینکه ظاهر بهتری داشته باشیم از یک تصویر loading هنگام ارسال درخواست به سرور استفاده کردیم که محل ذخیره آن درون پوشه images از پوشه Content میباشد.
به کدهای تابع sendData نگاهی بیاندازید.
function sendData() {
document.getElementById('gif').style.display = 'block';
var element = document.getElementById("gif");
element.classList.add("load");
document.getElementById('gif').innerHTML = "";
CreateObject();
http.open("POST", "/Home/receiveDataAction?Username=" + document.getElementById("Username").value, true);
http.onreadystatechange = getData;
http.send(null);
}
چهار خط اول این تابع صرفا جهت نمایش تصویر داخل تگ div با آیدی gif و پاک کردن متن قبلی آن میپردازد. سپس تابع Createobject را فراخوانی مینماید و این تابع وظیفه ایجاد شیئ http در مرورگرهای مختلف را دارد. ما با استفاده از شیئ http به ارسال داده از طریق ایجکس خواهیم پرداخت .
پس از ایجاد شیئ http با استفاده از متد open اکشن مورد نظر جهت پاسخ به درخواست کاربر را آدرس دهی میکنیم. در خط بعدی ان یعنی دستور http.onreadystatechange = getData; درواقع برنامه با این دستور جهت دریافت نتیجه ارسال شده از سمت سرور را که توسط اکشن receiveDataAction اجرا میشود را با استفاده از تابع getData انجام خواهد داد. و در پایان با استفاده از تابع send درخواست را به سرور ارسال میکنیم.
با توجه به تابع receiveDataAction درصورت مجاز بودن مقدار 1 و در صورت غیر مجاز بودن عدد 0 به کاربر ارسال میشود.
اکنون به تابع GetData نگاهی بیاندازیم.
دقت نمایید هنگام ارسال داده به سرور پاسخهای مختلفی مبنی بر مشخص نمودن وضعیت ارسال درخواست بصورت ایجکس برای کاربر ارائه خواهد شد و در صورتیکه مقدار http.readyState برابر با 4 باشد ارسال و دریافت پاسخ از سرور با موفقیت انجام شده است .