PDA

View Full Version : حرفه ای: مشکل کار با Jquery ajax در asp web form



hmahdavi921
سه شنبه 02 تیر 1394, 11:02 صبح
با سلام
دوستان حتما دیدید که در صفحات ثبت نام وب سایت ها بعد از اینکه ایمیلی وارد میشود و کنترل از المان مربوط به ایمیل خارج میشود (blur) ایمیل وارده بررسی شده و پیغامی در صفحه نمایش داده میشود .این کار از طریق Jquery ajax و وب سرویس انجام میشود.من نمونه این کار رو در dotnettip دیدم و انجامش دادم اما هر کاری که میکنم درست کار نمیکنه.دستوراتی که یک مقدار رو از دیتا بیس فراخوانی میکنه کاملادرسته وتست شده است. اما کد های jquery ajax که خیلی وارد نیستم ، یه ایرادی داره که جواب نمیده یعنی اصلا کار نمیکنه.من کد ها رو میزارم دوستان محبت کنید یک نگاه بندازید چند روزیه پروژه معلق مونده.
کد html تکست باکس :

<asp:TextBox Cssclass="form-control " ID="txt_email" runat="server" dir="rtl" placeholder="ایمیل" aria-describedby="inputGroupSuccess1Status" ></asp:TextBox>
کد C#‎‎‎‎‎‎‎‎‎ وب سرویس که در code behind خود صفحه نوشته شده :

//آیا کاربری این ایمیل را قبلا در سیستم ثبت کرده است؟
[WebMethod]
public static bool AreExistEmail( string emailP)
{
string email = null;
if (emailP != null)
email = HttpUtility.HtmlEncode(emailP);
try
{
var sqlcom = new SqlCommand
{
CommandType = CommandType.StoredProcedure,
CommandText = "aspnet_Membership_GetUserByEmail"
};
sqlcom.Parameters.AddWithValue("@ApplicationName", "/");
sqlcom.Parameters.AddWithValue("@Email", email);
var returnParameter = sqlcom.Parameters.Add("@ReturnVal", SqlDbType.Int); //بدست آوردن مقدار برگشتی از پراسیجر
returnParameter.Direction = ParameterDirection.ReturnValue;
sqlcom.Connection = Sqlcon.OpenCon();
sqlcom.ExecuteNonQuery();
var result = returnParameter.Value; //اگر برابر 1 بود ایمیل ثبت نشده و اگر نه ثبت شده
Sqlcon.CloseCon();
return (int)result == 1; //درست است اگر ایمیل ثبت نشده باشد
}
catch
{
return false;
}
}

کد jquery ajax :


<script type="text/javascript">
$(document).ready(function () {
$('#txt_email').blur(function (event) {
$.ajax({
type: "POST",
url: "createuser.aspx/AreExistEmail", //نام صفحه و متد
data: "{'emailP': '" + $('#<%=txt_email.ClientID%>').val() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
$("#div_email").append('<img id="imgLoading" src="../image/loading.gif" alt="لطفا کمی تامل کنید" style="width: 20px;height: 20px;" />');
var delay = function () {
AjaxSucceeded(msg);
};

setTimeout(delay, 500); //remove this
},
error: AjaxFailed
});
});
});
function AjaxSucceeded(result) {
if (result.d == true)
remove("#imgLoading");
else
if (result.d == false)
$('#div_email').append("<p class='text-danger'>متاسفانه نام کاربری مورد نظر پیشتر دریافت شده‌است</p>");
}
function AjaxFailed(result) {
alert(result.status + ' ' + result.statusText);
}
</script>

anubis_ir
سه شنبه 02 تیر 1394, 12:58 عصر
اين نوع كارهاي جاوا اسكريپتي رو بايد با مثلا فايرباگ ديباگ كني (http://www.dotnettips.info/post/1293/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-%d8%a7%d9%81%d8%b2%d9%88%d9%86%d9%87-firebug-%d8%a8%d8%b1%d8%a7%db%8c-%d8%af%db%8c%d8%a8%d8%a7%da%af-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87%e2%80%8c%d9%8 7%d8%a7%db%8c-asp-net-%d9%85%d8%a8%d8%aa%d9%86%db%8c-%d8%a8%d8%b1-jquery). وگرنه نميشه اظهار نظر كرد كه مشكل دقيقا چي بوده.
ضمنا نيازي به HttpUtility.HtmlEncode هم در سمت سرور نداري. زمانيكه پارامتري كار مي‌كني (البته بهتر بود يك DAL براش درست مي‌كردي)، خودش encode مي‌كنه.

hmahdavi921
سه شنبه 02 تیر 1394, 15:47 عصر
من مقاله رو خوندم اما خیلی چیزی دستگیرم نشد.خطا هایی که در پروژه من وجود داره خطاهای نحوی نیستند.فقط برای $ و jquery در تب DOM فایرباگ خطا گرفته که در سورس پروژه آموزشی هم همین خطا ها وجود دارند.اما درست کار میکنه .عکسهای خطا ها رو میزارم اگر که مشکل رو فهمیدین به ما هم بگین.ممنون میشم.
132536132537132538132539132540

xsbehx
چهارشنبه 03 تیر 1394, 14:34 عصر
شما باید برید تو تب net
اونجا می تونید بفهمید چی ارسال می شه و چی دریافت می شه.
اگر مقدار دریافتی شما کدهای html بود یا کلا چیزی که شما انتظارشو نداری، باید ببینی کجا اشتباه نحوی داشتی و ...

keiv@n
پنج شنبه 04 تیر 1394, 10:07 صبح
این دو خط مشکل داره :

url: "createuser.aspx/AreExistEmail", //نام صفحه و متد
data: "{'emailP': '" + $('#<%=txt_email.ClientID%>').val() + "'}",

عوص کن به :

url: "/createuser.aspx/AreExistEmail", //نام صفحه و متد
data: "{emailP: '" + $('#<%=txt_email.ClientID%>').val() + "'}",

البته معلوم نیست صفحه createuser.aspx کجای پروژت هست ، اگر داخل پوشه ای نیست و در روت قرار داره مثل آدرس دهی من عمل کن

general67
پنج شنبه 04 تیر 1394, 20:47 عصر
اول کد C# رو که از دیتا بیس می خونه با بریک پوینت اجرا کن ببین آیا نتیجه میده یا نه.

و تو بالا دوستا اشاره کردن ممکنه آدرست اشتباه باشه.

hmahdavi921
شنبه 06 تیر 1394, 09:39 صبح
ممنون دوستان حل شد .مشکل در این سطر بود $('#txt_email').blur(function (event) آی دی رو با clientId نوشتم و کار کرد.