PDA

View Full Version : راهنمایی در مورد این کد اجاکس



NIMA_1981
سه شنبه 25 مرداد 1390, 00:58 صبح
سلام دوستان

اقای نصیری یک آموزش برای آجاکس دارن

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxTest.aspx.cs" Inherits="testWebForms87.AjaxTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>jQuery Ajax Text</title>

<script src="jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#<%= TextBox1.ClientID %>").blur(function(event) {
$.ajax({
type: "POST",
url: "AjaxTest.aspx/IsUserAvailable",
data: "{'username': '" + $('#<%= TextBox1.ClientID %>').val() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$('#valid').html("<img src='ajaxImages/waiting.gif' alt='لطفا كمي تامل كنيد'>");
var delay = function() {
AjaxSucceeded(msg);
};

setTimeout(delay, 2000); //remove this
},
error: AjaxFailed
});
});
});
function AjaxSucceeded(result) {
if (result.d == true)
$('#msg').html("<img src='ajaxImages/available.gif' alt='نام كاربري درخواستي موجود است'>");
else
$('#msg').html("<img src='ajaxImages/taken.gif' alt='متاسفانه نام كاربري مورد نظر پيشتر دريافت شده‌است'>");
}
function AjaxFailed(result) {
alert(result.status + ' ' + result.statusText);
}
</script>

</head>
<body>
<form id="form1" runat="server">
<div>
user name:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<span id="msg"></span>
<br />
pass:
<asp:TextBox ID="TextBox2" TextMode="Password" runat="server"></asp:TextBox>
</div>
<!-- preload -->
<div style="display: none">
<img src="ajaxImages/available.gif" alt="available" />
<img src="ajaxImages/taken.gif" alt="taken" />
<img src="ajaxImages/waiting.gif" alt="waiting" />
</div>
</form>
</body>
</html>




using System;
using System.Web.Services;

namespace testWebForms87
{
public partial class AjaxTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}

[WebMethod]
public static bool IsUserAvailable(string username)
{
// اين مورد را با خواندن اطلاعات از ديتابيس مي‌شود تعويض كرد
return username != "test";
}
}
}



حالا این کد حا فقط یک تکست باکس رو چک می کنه میشه بگید برای چند تا تکست باکس باید کدرا چطوری تغییر بدم

با تشکر

ASPX
سه شنبه 25 مرداد 1390, 07:55 صبح
هر جند تا خواستی textbox بذار ولی به تکست باکس هات cssClass یکسان بده به عنوان مثال اگه cssClass تکست باکسهات txt باشه


$(document).ready(function() {
$(".txt").blur(function(event) {
$.ajax({
type: "POST",
url: "AjaxTest.aspx/IsUserAvailable",
data: "{'username': '" + $(".txt").val() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$('#valid').html("<img src='ajaxImages/waiting.gif' alt='لطفا كمي تامل كنيد'>");
var delay = function() {
AjaxSucceeded(msg);
};

setTimeout(delay, 2000); //remove this
},
error: AjaxFailed
});
});
});

NIMA_1981
سه شنبه 25 مرداد 1390, 09:32 صبح
خوب میشه بگید از کجا میفهمه که تکست باکس اول باید برابر با چی باشه و تکست باکس دوم برابر با چی که تشخیص بده اطلاعات وارد شده درسته یا نه -میشه همین کد را برای 2 تا نکست باکس تغییر بدید

javad.nic63
سه شنبه 25 مرداد 1390, 10:50 صبح
در تابع ایجکس اینطوری بنویس:

$(document).ready(function() {
$("#<%= TextBox1.ClientID %>").blur(function(event) {
$.ajax({
type: "POST",
url: "AjaxTest.aspx/IsUserAvailable",
data: "{'username': '" + $('#<%= TextBox1.ClientID %>').val() + "','password':'"+$('#<%= TextBox2.ClientID %>').val() +"'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$('#valid').html("<img src='ajaxImages/waiting.gif' alt='لطفا كمي تامل كنيد'>");
var delay = function() {
AjaxSucceeded(msg);
};

setTimeout(delay, 2000); //remove this
},
error: AjaxFailed
});
});
});


و در webservice هم تابع رو اینطوری تعریف می کنی

using System;
using System.Web.Services;

namespace testWebForms87
{
public partial class AjaxTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}

[WebMethod]
public static bool IsUserAvailable(string username, string password)
{
// اين مورد را با خواندن اطلاعات از ديتابيس مي‌شود تعويض كرد
return username != "test";
}
}
}


به همین راحتی

NIMA_1981
سه شنبه 25 مرداد 1390, 11:36 صبح
فقط اینحا توی ابن کد
return username != "test";

فقط username رو بر میگردونه باید برای نکس باکس دیگه هم باید یک مقدار برگردونه

NIMA_1981
سه شنبه 25 مرداد 1390, 12:52 عصر
من همین ماری که شما گفتین انجام دادم اما دیگه هیچ کاری نمیکنه

javad.nic63
سه شنبه 25 مرداد 1390, 14:17 عصر
فقط اینحا توی ابن کد
return username != "test";
فقط username رو بر میگردونه باید برای نکس باکس دیگه هم باید یک مقدار برگردونه

اگه هدفت از این کد اینه که ببینی اگه کاربر هست مثلا لاگین کنی username و password رو که می گیری در پایگاه داده ات سرچ می کنی اگه کاربری با این مشخصات وجود داشت true برگشت میدی و اگه وجود نداشت false برگشت میدی

\\دستورات چک کردن کاربر
if (dr.HasRows)
Return true;
else
Return false;

درضمن از نوع تابع boolean استفاده کن


من همین ماری که شما گفتین انجام دادم اما دیگه هیچ کاری نمیکنه
بجای #<%= TextBox1.ClientID %> از id سمت کلاینت تکس باکس هات استفاده کن. برای این کار صفحت رو اجرا کن بعد توی مرورگرت برو و سورس صفحه رو مشاهده کن. در اونجا id تکس باکست رو میگیری و به جای این عبارت میزاری. دقت کن که به صورت زیر باشه
#TextBox1Id

NIMA_1981
سه شنبه 25 مرداد 1390, 15:35 عصر
ممنون از راهنمایی شما -ببنید منظور من صفحه لوگین نسیت فرض کنید من یک فرم دارم که یکسری داده باید به لحظه چک کنه چطوری برای هر تکست باکس اینو باید برسی کنیم

javad.nic63
سه شنبه 25 مرداد 1390, 15:51 عصر
بهترین روش اینه که برای هرتکس باکس یک تابع بنویس و فقط اطلاعات همون تکس باکس رو چک کنی عزیز
درواقع برای هر تکس باکس کد زیر رو تکرار کنی. البته مواردی که بهت گفتم فراموش نکن

$("#<%= TextBox1.ClientID %>").blur(function(event) {
$.ajax({
type: "POST",
url: "AjaxTest.aspx/IsUserAvailable",
data: "{'username': '" + $('#<%= TextBox1.ClientID %>').val() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$('#valid').html("<img src='ajaxImages/waiting.gif' alt='لطفا كمي تامل كنيد'>");
var delay = function() {
AjaxSucceeded(msg);
};

setTimeout(delay, 2000); //remove this
},
error: AjaxFailed
});
});

NIMA_1981
چهارشنبه 26 مرداد 1390, 01:37 صبح
افا دستت درد نکنه با راهنمایی شما متوجه شدم فقط یک سوال چزا من لودینگ رو نمی بینم

javad.nic63
چهارشنبه 26 مرداد 1390, 11:47 صبح
افا دستت درد نکنه با راهنمایی شما متوجه شدم فقط یک سوال چزا من لودینگ رو نمی بینم

باید تابعت رو به این صورت بنویسی

$("#<%= TextBox1.ClientID %>").blur(function(event) {
$('#valid').html("<img src='ajaxImages/waiting.gif' alt='لطفا كمي تامل كنيد'>");
$.ajax({
type: "POST",
url: "AjaxTest.aspx/IsUserAvailable",
data: "{'username': '" + $('#<%= TextBox1.ClientID %>').val() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$('#valid').html("");



var delay = function() {
AjaxSucceeded(msg);
};

setTimeout(delay, 2000); //remove this
},
error: AjaxFailed
});
});

NIMA_1981
چهارشنبه 26 مرداد 1390, 17:18 عصر
مرسی مقدار #valid را به مقدار msg تغییر دارم درست شد مرسی از راهنمایی شما

NIMA_1981
چهارشنبه 26 مرداد 1390, 17:19 عصر
یک راهنمایی دیکه برای قرم های که فیلد های زیادی داشته باشه اگه برای هر مفدار یک کد نوشته بشه حجم سایت بالا میره آیا روش دیگه هست یا باید حتما از ایم روش استفاده بشود

javad.nic63
شنبه 29 مرداد 1390, 12:21 عصر
بستگی به نظر خودت داره عزیز جان. میتونی از این روش استفاده کنی که کارت راحتتره ولی حجم کدهات بالا میره. ولی حجم سایت خیلی تأثیری نداره. اما میتونی از روش دیگه هم استفاده کنی اونم اینه که با خارج شدن از هر کنترلت همون تابع رو صدا بزنی ولی به جای اینکه بخوای یک true یا false برگشت بدی باید آرایه برگشت بدی و اون آرایه رو با کد ایجکست مورد تحلیل قرار بدی و ببینی که همه فیلدهات درست هست یانه. این روش کدنویسیش یه کم سخت تره ولی بهتره