PDA

View Full Version : اجرای یه تابع در ajax Jquery



peymannaji
جمعه 13 شهریور 1388, 19:24 عصر
با سلام

من میخوام هنگام موفقیت در کد زیر :



$.ajax({
type: "POST",
url: "WebService.asmx/DelRecord",
data: info,
success: function() {
}
});



قطعه کد زیر اجرا بشه :




$(this).parents(".record").animate({ backgroundColor: "#fbc7c7" }, "fast")
.animate({ opacity: "hide" }, "slow");


چنانچه تکه کد بالا را در روال مربوط به success (قطعه کد اول ) قرار بدم کد آخر اجرا نمیشه ... برای اینکار چه باید کرد ؟ و بطور کلی توابعی که شامل کد های Jquery است رو چگونه میشه صدا زد ... چرا که در جاوااسکریپت مانند سایر برنامه ها عمل میکنه نام تابع رو صدا میزنیم . و تابع اجرا میشه .
دوستان راهنمایی بفرمائید .
با تشکر

peymannaji
شنبه 14 شهریور 1388, 00:22 صبح
success: function() {
}
خوب مگه این رو ندیدی ؟


اون بالا هم عرض کردم که اون قطعه کد رو داخل این روال گذاشتم اما کار نکرد !

peymannaji
شنبه 14 شهریور 1388, 13:14 عصر
چون رادست نیست که نمیشه از خیرش گذشت ! بالاخره یه راهی باید داشته باشه .

eAmin
شنبه 14 شهریور 1388, 18:27 عصر
سلام.

شما اول یک کد معمولی جاوااسکریپت بنویسید، مثلا alert ببینید کار می کنه یا خیر، اگر درست اجرا شد پس حتما مشکل از همون کدهای آخری شماست.

به نظر من مشکل از این قسمت هست:
$(this).
اشاره گر this رو حذف و مستقیما id یا class المنت مروبطه رو قرار بدید.

peymannaji
شنبه 14 شهریور 1388, 19:02 عصر
وقتی alert میزارم جواب میده ...
کاری که گفتید رو انجام دادم به شکل های مختلف یا کار نمیکنه یا کل رکوردهای جدول پاک میشه ...

peymannaji
شنبه 14 شهریور 1388, 21:39 عصر
آقای برادر میشه بگید مورد استفادت چیه ؟

برادر مورد استفاده اینکه من یک جدول دارم . هر رکورد هم یه دکمه delete داره . شماره رکورد از طریق jquery به وب سرویس داده میشه و بعد از آنکه رکورد از دیتابیس پاک شد میخوام در صورت موفقیت آمیز بودن اینکار اون رکورد هم بصورت clientside و با همون کدهایی که دیدی Fade بشه .

مهدی کرامتی
چهارشنبه 18 شهریور 1388, 00:23 صبح
چنانچه تکه کد بالا را در روال مربوط به success (قطعه کد اول ) قرار بدم کد آخر اجرا نمیشه ... برای اینکار چه باید کرد ؟
مشکل اینجاست که this پس از اجرای وب سرویس دیگه به عنصری که مد نظر شماست اشاره نمی کنه، بلکه به Context وب سرویس اشاره میکنه. بنابراین متدهای animate و ... کار نخواهند کرد.

peymannaji
چهارشنبه 18 شهریور 1388, 15:14 عصر
تکه کد مربوط به انمیشن هر جا قرار میگیره کار میکنه غیر از 2 جا یکی اینکه در روال مربوط به success یا در روال هایی که خود ایجاد کنیم . استاد به نظر شما راه حل چیه چیکار باید کرد و چه تغییری در کد ایجاد کنم ؟

مهدی کرامتی
چهارشنبه 18 شهریور 1388, 17:46 عصر
دلیل کار نکردنش رو در پاسخ قبلی خدمت تان عرض کردم.

راه حل ساده ای که بنظر من میاد اینه وقتی دکمه Delete کلیک میشه اول ردیف مربوطه در گرید مخفی بشه، سپس در خط بعدی وب سرویسی که رکورد رو حذف میکنه فراخوانی بشه.

راه حل دوم (مشکل تر) اینه که عنصری که قبل از فراخوانی وب سرویس توسط this به اون اشاره میشه رو یک جا نگه دارید و پس از فراخوانی وب سرویس عملیات مخفی کردن ردیف رو با استفاده از اون انجام بدهید.

Exception
جمعه 20 شهریور 1388, 11:21 صبح
با سلام

من میخوام هنگام موفقیت در کد زیر :



$.ajax({
type: "POST",
url: "WebService.asmx/DelRecord",
data: info,
success: function() {
}
});

قطعه کد زیر اجرا بشه :




$(this).parents(".record").animate({ backgroundColor: "#fbc7c7" }, "fast")
.animate({ opacity: "hide" }, "slow");
چنانچه تکه کد بالا را در روال مربوط به success (قطعه کد اول ) قرار بدم کد آخر اجرا نمیشه ... برای اینکار چه باید کرد ؟ و بطور کلی توابعی که شامل کد های Jquery است رو چگونه میشه صدا زد ... چرا که در جاوااسکریپت مانند سایر برنامه ها عمل میکنه نام تابع رو صدا میزنیم . و تابع اجرا میشه .
دوستان راهنمایی بفرمائید .
با تشکر

مشکل از this هست. اونجا this به همون شیء ajax اشاره میکنه و نه چیزی که روش کلیک شده. برای حل مشکل، قبل از فراخوانی ajax، مقدار this رو ذخیره کن و از اون استفاده کن. اینجوری:


var self = $(this);
$.ajax({
type: "POST",
url: "WebService.asmx/DelRecord",
data: info,
success: function() {
self.parents(".record")
.animate({ backgroundColor: "#fbc7c7" }, "fast")
.animate({ opacity: "hide" }, "slow");
}
});


نه قبلا هم من سی رو دیده بودم که از یک پلاگینش استفاده کرده بود , به اررور می خورد , چند تا سوال پرسید دیدم خیلی داره در کمال سادگی پیچیده میشه :عصبانی++:

کلا کدش رو پاک کردم , براش از دوباره نوشتم !

دوست عزیز، وقتی به یک ابزار مسلط نیستین، دلیل نمیشه بگین ابزار خوبی نیست. من که شخصا تا حالا کتابخانه ای به خوش دستی jQuery برای JavaScript ندیدم. البته اگر دوست دارین هر بار چرخ رو از اول اختراع کنین که اون مساله دیگه ای هست.
ضمنا مشکل داشتن با یک پلاگین (که اکثرا توسط خود تیم jQuery نوشته نشده و کاربران اونها رو توسعه میدن) دلیل ضعف jQuery نیست. بحث پلاگینهای jQuery کاملا جدا از بحث این پست هست. اینجا روی core صحبت شده بود.

peymannaji
جمعه 20 شهریور 1388, 14:26 عصر
والا من نوشته بودم مشکل با روش دوم استاد حل شد . اما دیدم نیست که شما هم زحمت کشیدید و ممنون. بله مشکل رو من با روش 2 حل کردم . اما واقعا این Jquery دیوانه کننده است با این که برای من بعنوان یه تازه کار کمی سخته اما از موقعی که باهاش آشنا شدم برنامه نویسی سرور ساید برام کم رنگ شده :لبخند: