النتائج 1 إلى 6 من 6

الموضوع: سؤال بخصوص GM_xmlhttpRequest اريدها غير متزامنة

  1. سؤال بخصوص GM_xmlhttpRequest اريدها غير متزامنة



    السلام عليكم


    لمن يستطيع ان يجد حلا

    الحين هناك عدد من الصفحات اريد ان افتحها و اسحب منها محتويات

    قمت بإستخدام GM_xmlhttpRequest لأن البيئة التي اعمل عليها و حسب الطلب يجب علي استخدامها

    المشكلة الحين انها بداخل for loop و كما تعلمون الي الجافا سكريب متزامنه يعني قبل ان تنتهي من جلب اول صفحه تبدأ في جلب الأخرى و يصبح هناك تداخل في البيانات الي تم جلبها

    اريد ان امنع ال loop من ان تقوم بدورة جديدة قبل ان ينتهي GM_xmlhttpRequest من جلب الصفحة و فلترتها

    جزء من الكود

    كود:
            for (var i=0; i<13; i++)
            {
                var cityE = document.getElementById("cityLocation"+i);
    
                var temp  = getElementsByClass("cityinfo", cityE, null)[0].firstChild.nextSibling;
                var idx = temp.nextSibling.nextSibling.innerHTML.indexOf("</span>");
                var name = trim(temp.nextSibling.nextSibling.nextSibling.nextSibling.innerHTML.substring(idx+9).split("<")[0]);
                var level = temp.nextSibling.nextSibling.innerHTML.substring(idx+7);
                // alert(i);
                
                request("this should be the url", "the post data", function (response){getData(response,  name, type, playerID)}, 'POST');
                
                
                //////////////////////////////////////////////////
                //     هنا يتم معاجلة البيانات و تخزينها           //
                //////////////////////////////////////////////////
            }
            
            
            
            و هنا function request 
            
            function request(url, data, onload, method) {
    
                GM_xmlhttpRequest({
                    method:method,
                    url:'http://' + document.domain + '/index.php?'+url,
                    data:data,
                    headers: {
                        'User-agent': 'Mozilla/4.0 (compatible) ********',
                        'Content-type': 'application/x-www-form-urlencoded',
                        'Accept': 'application/atom+xml,application/xml,text/xml',
                        'Referer': 'http://' + document.domain  + '/index.php', 
                        'Cookie': document.cookie
                    },
                    onload:onload
                });
            }


    و شكرا





    __________________
    سبحان الله و بحمده .... سبحان الله العظيم

    للمراسلة


  2. #2
    عضو نشيط
    تاريخ التسجيل
    Jan 2008
    المشاركات
    164


    السلام عليكم
    أنظر هذا الرابط، به توضح للكائن الذي تريد التعامل معه!
    GM_xmlhttpRequest [Dive Into Greasemonkey]

    أنصحك برؤية الحدث onload وكذلك الخاصية readyStatus

    هذا ما لدي وشكراً





    __________________
    مدونة شخصية: عمر الدليمي
    راسلني
    أنصح بإستخدام "أوبونتو"



  3. شكرا لك اخي عمر الدليمي

    اعرف تماما ما هو onload وكذلك الخاصية readyStatus

    onload ماله علاقة و readyStatus جربت كم حركة فيه و لكن المشكلة ان الجافا متزامنه





    __________________
    سبحان الله و بحمده .... سبحان الله العظيم

    للمراسلة



  4. قم بعمل function تستدعى نفسها عدد معين من المرات - recursive - فقط بعد التأكد من اكتمال عمل GM_xmlhttpRequest
    كود PHP:
    function checkAndFetch(i){
    --
    i;
    GM_xmlhttpRequest({
                    
    method:method,
                    
    url:url,
                    
    data:data,
                    
    onload:function(){
                          
    // do someThing;
                          
    if(i>1checkAndFetch(i);
                    }
                });

    }
    checkAndFetch(13); 






    __________________
    Keepondev | مدونه شديد التخصص فى الجافاسكربت
    جافاسكربت الموجهه بالكائنات | أنماط تصميم جافاسكربت

  5. #5
    عضو نشيط
    تاريخ التسجيل
    May 2008
    المشاركات
    235


    السلام عليكم،
    أنت تريد أن تطلب أمر أجاكس جديد بعد إنتهاء الأول، و ليس عندما تبدأ loop جديد.

    لذا أظن من الأفضل إضافة شرط آخر في ال if ، ينفذ العملية بعد إنتهاء طلب الأجاكس
    يعني الشرط التالي.:
    if (http.readyState == 4)





    التعديل الأخير تم بواسطة amiraldo1 ; 02-01-2009 الساعة 03:54 AM



  6. Dezology فعلا هذا ما قمت بعمله حتى قبل ان ارى ردك تسلم مشكور جدا على ردك على الأقل اقتنعت انها الطريقة الافضل لأني كنت اظن ان هناك حل يعرفه المتعمقين في الجافاسكريبت

    amiraldo1 حتى هذه لم تنجح جربتها و شكرا لك على الرد

    تم حل المشكلة على نفس الطريقة الي ذكرها الأخ Dezology





    __________________
    سبحان الله و بحمده .... سبحان الله العظيم

    للمراسلة





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض