یه اتفاق عجیب

نوشته شده توسط بهنامی در ۲۶ اردیبهشت ۱۳۹۳

دیروز تو شرکت مشغول کار بودم  یه بخشی از وب سایت رو مورد بررسی قرار میدادم فایرباگ هم باز بود یهو متوجه یه قضیه عجیب شدم تو وب سایتم

من تو صفحه ام ۲ تا لیست باز شونده یا همون کمبو باکس داشتم که کمبو اولی موجب تغییر کمبو دوم میشد و کمبو دوم هم موجب تغییر داده های نمایش داده شده در Grid  صفحه میشد …

من متوجه شدم که تابع بارگزاری داده های از سرور برای Grid دو بار اجرا میشه خیلی تعجب کردم کل کد هامو بالا پایین کردم دیدم فقط یک بار فراخوانی کردمش بعد یکم بررسی دقیق تر متوجه شدم که هر چند بار کمبو اولی رو تغییر بدم به همون تعداد تابع بارگزاری Grid فراخوانی میشه

حالا قضیه چی بود ؟؟؟

وقتی یه تابع رو به یه Event یه آبجکت نسبت مییدیم مثلا change یا Click و در داخل اون تابع اختصاص داده شده به یه Event  یه آبجکت دیگه یه تابعی رو اختصاص میدیم اون تابع دوم به تعداد تغییر های Event اولی اختصاص داده میشه یکم گنگ شد جمله هام بزارید با یه مثال کامل توضیح بدم

من تو Change  کمبو اولی نوشته بودم که کمبو دومی رو ست بکن و تو تابع ست کردن کمبو دومی نوشته بودم Grid رو هم بارگزاری بکن

اتفاقی که میافتاد این بود : تابع هایی که به Event ها نسبت داده میشن هر چند بار نسبت داده بشن همون تعداد اجرا میشن

مثلا اگه من کمبو اولی رو ۱۰ بار مقدارشو تغییر میدادم ۱۰ بار تابع ست کردن Grid به کمبو دوم اختصاص داده میشد و وقتی کمبو دومی رو تغییر میدادم ۱۰ بار Grid ست میشد

خب این اتفاق بعضی وقتا خوبه بعضی وقتا بد باید بدونیم کی از این قضیه به نقع خودمون استفاده کنیم

راه مقابله با این اتفاق اینه که قبل از اختصاص تابع به event همه تابع های اختصاص داده شده رو از بین ببریم و بعد تابع جدید رو اختصاص بدیم

این کار تو جی کوئری با این دستور انجام میشود

$( “#foo”).unbind( “click” );

شاید من اونطور باید و شاید نتونستم توضیح بدم این قضیه رو از لینک زیر میتونید کامل مطالعه بکنید نحوه استفاده از این دستور رو …

استفاده از تابع unbind

امید وارم که مفید بوده باشه این مطلب  برای خود من که خیلی جالب بود گفتم باهاتون شریک بشم این مطلب رو

بدون دیدگاه دسته‌بندی : جی کوئری

آپلود فایل از طریق جی کوئری و اجکس

نوشته شده توسط بهنامی در ۱۱ فروردین ۱۳۹۳

سلام عیدتون مبارک امید وارم سال خوبی داشته باشین پر از خیر و برکت باشه براتون

چند وقت پیش من با یه موضوعی درگیر بودم به اسم آپلود فایل از طریق جی کوئری و اجکس و میشه گفت راه نبود که امتحان کنم و نتیجه اش راضی کننده باشه برام …

form data() رو امتحان کردم …ifram  رو امتحان کردم و روش های مختلف دیگه ای خلاصه دیگه لینکی نمونده بود که تو نتیجه جستجو گوگل اومده باشه و من سری نزده باشم بهش سرتون درد نیارم بعد از حدود یک ماه اینور اون ور زدن به این راه حل رسیدم که تقریبا منو راضی کرد و دلایلی که باعث شد من راضی بشم از این راه حل :

۱- اول اینکه به صورت اجکس میفرسته واقعا و پشتش هیچ دور زدن و کلکی سوار نشده :دی

۲- در تمامی مرورگر ها کار میکنه و مثل روش formdata نیست که تو اینترنت اکسپلورر (که لعنت خدا بر او باد)  کار نکنه تو همشون کار میکنه فقط تو همه مرورگر ها بدون بارگزاری مجدد صفحه کار میکنه و در اینترنت اکسپلورر یه رفرش کوچولو انجام میده به خاطر سابمیت صفحه

در ضمن خیلی خیلی راحت میشه باهاش پارامتر هم ارسال کرد به سمت سرور و در ان واحد میشه چندین فایل رو هم ارسال کرد…

این کد هستش :

<script type=”text/javascript”>

    $(document).ready(function () {

        $("#formsubmit").click(function () {

            var data = {id:”behnam”};

            var form = $(‘#theuploadform’);

            form.attr(“action”, “/testfileupload.aspx”);

            form.attr(“method”, “post”);

            form.attr(“enctype”, “multipart/form-data”);

            form.attr(“encoding”, “multipart/form-data”);

            form.attr(“file”, $(‘#File1’).val());

            form.ajaxSubmit({

                success: function () {

                    alert(“ok”);

                },

                data: data

            });


            return false;


        });


    });

</script>

فقط کافیه که تو صفحه تون ابجکت اپلود فایل رو قرار بدین و در سمت سرور با ریکوئست ،فایل ها تون رو بگیرید و ذخیره کنید

مطمئن هستم راه های بهتری هست و شما اون راه هارو یا بلد هستید یا پیدا خواهید کرد خوشحال میشم که راه هایی که ازش استفاده میکنید رو بگید تا من هم یاد بگیرم 🙂

۳ دیدگاه دسته‌بندی : جی کوئری

استفاده از jquery ajax برای ارسال داده به سرور ساید

نوشته شده توسط بهنامی در ۹ اسفند ۱۳۹۲

سلام خوبین ؟

اول تشکر از بابت لطف دوستان نسبت به پست اول وبلاگم که خیلی خیلی به من انرژی و امید دادن بابت ادامه کارم

خب تو هر سایتی شما باید برای اینکه یه اطلاعاتی رو از سرور بخونید و بیارید مثل داده های پایگاه داده یا اطلاعات سشن ها یا چیزای شبیه این مجبورید که تو سمت سرور یه کد هایی رو بنویسید حالا چه میخواد سایت شما سمت سرور سایدش PHP  باشه یا ASP.NET یا هر چیز دیگه ای …

*(من چون خودم ASP.NET کار میکنم برای همین اکثر مثال ها و حرفا حول محور اون خواهد بود )

خب الان ارسال داده ها از سمت کلاینت به سمت سرور ساید میتونه چند جور باشه

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

یه روش دیگه بیشتر امروز مد نظر من هست تو این پست استفاده از jquery Ajax هستش

خب این اصلا یعنی چی ؟؟؟؟

یعنی اینکه تمام کار ها سمت کلاینت ساید با جاوا اسکریپت ها و جی کوئری و فقط و فقط زمانی که نیاز هست به سرور مراجعه میشه مثل خوندن یه داده ای از دیتا بیس یا کار هایی شبیه این

این روش مزیت های زیادی داره قدرت مانور خیلی بالایی روی صفحه تون دارین سرعت اجرای صفحه تون خب به نسبت روش قدیمی خیلی بالا تر هستش و …

نحوه کار این روش شما داده هاتون رو سمت کلاینت ساید از کاربر میگیرید تمام کارهای پردازشی که لازم هست رو روش انجام میدین ( سرور برای این کار مشغول نمیشه ) در نهایت در زمان نیاز اونارو به صورت اجاکس به سمت سرور میفرستید سرور عملیات مد نظر رو انجام میده روش بعد نتیجه رو به صورت json بهتون بر میگردونه و دوباره پردازش اطلاعات برگشت داده شده و نمایش اونها در سمت کلاینت ساید انجام میشه

یه نمونه کد از این کار (البته این روش وب متد هستش یعنی یه تابع خاص از یه صفحه رو فراخوانی میکنم به جای فراخوانی کل صفحه

البته این روشی هستش که من فک میکنم درسته و نظر شخصیمه دوستان و با تجربه ها باید بگن که چقدر این نظر من درسته و صد در صد روش های بهتری هم هست که من بلد نیستم که دوستان اگه اشاره کنن بهش خیلی هم خوب میشه هم یاد میگرم اونو و هم یه پست هم در مورد اون می نویسم ایشالا 🙂

 

[]$.ajax({

    type: “POST”,

    url: “Masir FILE ASPX ke -FUNCTION Dakhele ON Hastesh/My_Fuction  ( be horofe kochak va bozorg hasas hastesh)”,

    contentType: “application/json; charset=utf-8”,

    data: “{‘Parametr1′:’مقدار پارامتر’,’Parametr2′:’مقدار پارامتر’}”,

    datatype: “json”,

    success: function (result) {

// اگر عملیات موفقیت امیز باشد این قسمت اجرا میشود

        if (result.d == “UnSuccess”) {

        } else {

            //alert(result.d);

            result = $.parseJSON(result.d);

            $.each(result, function (index) {

//چون داده برگشتی ما به صورت چندین رکورد بود در این قسمت با استفاده از  از این حلقه تک تک رکورد های برگشتی را بررسی میکنیم

             });

},

    error: function (error) {

        //Message

        //بروز خطا در اجرای کد های سمت سرور این قسمت اجرا میشود

        //console.error(error.d);

    }

});

using System.Web.Services;

[WebMethod]

public static string My_Fuction(string Parametr)

    {

          // عملیات دلخواهتون رو بنویسید

                if (“عملیات موفقیت آمیز”)

                {

                    return Newtonsoft.Json.JsonConvert.SerializeObject(result, Formatting.Indented); ;

                   // این خط برای تبدیل کردن نتیجه کار که در اینجا یک DATATable  هستش به داده فرمت json   هستش و  Newtonsoft یک کامپوننت برای این کاره شما میتونید خودتون از طریق خود .NET این کار رو انجام بدین

                }

                else

                {

                    return “UnSuccess”;

و یا نتیجه رو به صورت یه رشته معمولی برگردونید که معمولا اگه نتیجه درست یا خطا باشه اینطوری استفاده میکنیم

                }

    }

 

بدون دیدگاه دسته‌بندی : جی کوئری