הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

חזור   הוסטס - פורום אחסון האתרים הגדול בישראל > עיצוב גראפי, תכנות על כל שפותיו וקידום ושיווק אתרים > פורום תיכנות

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 02-08-12, 02:41   # 1
איציק ברבי
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Feb 2011
הודעות: 970

איציק ברבי לא מחובר  

Jquery| autocomplete בAJAX

PHP קוד:
$("input.fullname").change(function(){
        $.
ajax({
            
url"Sources/Ajax.php?act=User_List",
            
type"POST",
            
data"fullname="+$(this).val(),
            
success: function(callback){
                
Tags callback.split(',');
            }
        });
        $( 
"#tags" ).autocomplete({
            
sourceTags
        
});
        return 
false;
    }); 
הסתובבתי באינטרנט בשביל לחפש מידע ובניתי את הקוד הזה..
עכשיו הוא לא עובד, קישרתי את הספרייה של autocomplete אשמח אם משהו יוכל לתקן לי את הקוד..
תודה!
__________________

איציק ברבי - שירות לקוחות
כתובת אתר: http://build-net.co.il/
איימל: Support@build-net.co.il
טלפון: 052-3937296.
  Reply With Quote
ישן 02-08-12, 05:08   # 2
perfeito
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Jul 2012
הודעות: 102

perfeito לא מחובר  

מה שקרה זה ככה:
אמרת ל jQuery לכי תביאי לי tags
ובינתיים תעשי autocomplete על #tags

מה שהיית צריך לעשות זה:
להביא את הטאגס ואחר כך לעשות autocomplete על הטאגס

בגלל זה javascript תמיד תהיה שפה יותר טובה מ php היא מריצה פקודות לא אחד אחרי השני
אלא בכאילו parallel

קוד צריך להיראות ככה.

קוד:
$("input.fullname").change(function(){
  $.ajax({
      url: "Sources/Ajax.php?act=User_List",
      type: "POST",
      data: "fullname="+$(this).val(),
      success: function(data){
        $( "#tags" ).autocomplete({
          source: data.split(',')
        });
      }
  });
  return false;
});
  Reply With Quote
ישן 02-08-12, 05:09   # 3
perfeito
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Jul 2012
הודעות: 102

perfeito לא מחובר  

ציטוט:
נכתב במקור על ידי perfeito צפה בהודעה
מה שקרה זה ככה:
אמרת ל jQuery לכי תביאי לי tags
ובינתיים תעשי autocomplete על #tags

מה שהיית צריך לעשות זה:
להביא את הטאגס ואחר כך לעשות autocomplete על הטאגס

בגלל זה javascript תמיד תהיה שפה יותר טובה מ php היא מריצה פקודות לא אחד אחרי השני
אלא בכאילו parallel

קוד צריך להיראות ככה.

קוד:
$("input.fullname").change(function(){
  $.ajax({
      url: "Sources/Ajax.php?act=User_List",
      type: "POST",
      data: "fullname="+$(this).val(),
      success: function(data){
        $( "#tags" ).autocomplete({
          source: data.split(',')
        });
      }
  });
  return false;
});
בקיצור בקוד שלך כשהרצת autocomplete
Tags עדיין לא הגיע....
  Reply With Quote
ישן 02-08-12, 07:33   # 4
איציק ברבי
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Feb 2011
הודעות: 970

איציק ברבי לא מחובר  

זה היה נסיון אחד ל... אשמח אם תתקן לי את הקוד.
__________________

איציק ברבי - שירות לקוחות
כתובת אתר: http://build-net.co.il/
איימל: Support@build-net.co.il
טלפון: 052-3937296.
  Reply With Quote
ישן 02-08-12, 09:17   # 5
perfeito
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Jul 2012
הודעות: 102

perfeito לא מחובר  

מה לא עובד אחי ?
למה לא לעשות ב keyup ? במקום change תעשה console.log() במקומות שונים ותברר מה קורה..
  Reply With Quote
ישן 02-08-12, 15:01   # 6
איציק ברבי
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Feb 2011
הודעות: 970

איציק ברבי לא מחובר  

סידרתי את הקוד, הוא עובד אבל די לאט עלה לי רעיון לבטל את כל הבקשות של הAJAX שנשלחו איך אני עושה את זה? די הסתבכתי..
PHP קוד:
$("input.fullname").keyup(function(){
        $.
ajax({
            
url"Sources/Ajax.php?act=User_List",
            
type"POST",
            
data"fullname="+$(this).val(),
            
success: function(callback){
                
availableTags callback.split(',');
                $(
"input.fullname").autocomplete({
                    
sourceavailableTags
                
});
            }
        });
        return 
false;
    }); 
__________________

איציק ברבי - שירות לקוחות
כתובת אתר: http://build-net.co.il/
איימל: Support@build-net.co.il
טלפון: 052-3937296.

Last edited by איציק ברבי; 02-08-12 at 15:36..
  Reply With Quote
ישן 02-08-12, 15:36   # 7
IgalSt
מנהל פורום, עסק רשום
 
IgalSt's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: המרכז
גיל: 37
הודעות: 1,432
Send a message via Skype™ to IgalSt

IgalSt לא מחובר  

ציטוט:
נכתב במקור על ידי איציק ברבי צפה בהודעה
סידרתי את הקוד, הוא עובד אבל די לאט עלה לי רעיון לבטל את כל הבקשות של הAJAX שנשלחו איך אני עושה את זה? די הסתבכתי..
PHP קוד:
$("input.fullname").keyup(function(){
        $.
ajax({
            
url"Sources/Ajax.php?act=User_List",
            
type"POST",
            
data"fullname="+$(this).val(),
            
success: function(callback){
                
availableTags callback.split(',');
                $(
"input.fullname").autocomplete({
                    
sourceavailableTags
                
});
            }
        });
        return 
false;
    }); 
הכיוון הזה מאוד לא טוב.
מה שאתה עושה זה לאתחל הכל מההתחלה אחרי כל לחיצת כפתור במקלדת. לא עושים את זה ככה.

תיקנתי לך את הקוד המקורי שלך.
http://jsfiddle.net/C2sRR/3/

אני ממליץ לך להסתכל על הדוגמה הזאת בדוקומנטציה (אומנם מדובר ב-JSONP, אך העקרון זהה).
שים לב שייתכן מאוד שתצטרך למפות את הנתונים שאתה מקבל באחרי קריאת ה-AJAX שלך לאובייקט JS ש-autocomplete מצפה לקבל ממך.

בנוסף אני ממליץ לעיין בדוגמה עם cache, כך שזה אמור להאיץ משמעותית את הביצועים שכן אתה לא תבצע קריאות AJAX מרובות, אלא לרוב רק פעם אחת.
לדוגמה אם אתה מחליט לבצע קריאת AJAX אחרי שהיוזר הזין 2 אותיות, אז יחזרו לך תוצאות. כשהוא יוסיף אות נוספת, אתה תעשה את הסינון מתוך התוצאות שחזרו לך לפני כן (כשהוא לך רק 2 אותיות). במקרה כזה בוודאי שאין צורך לקריאה נוספת שכן אם התוצאה נמצאת ב-DB, היא אחת מהתוצאות שכבר חזרו לך לפני כן.

Last edited by IgalSt; 02-08-12 at 15:39..
  Reply With Quote
ישן 02-08-12, 19:11   # 8
Itay
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 564

Itay לא מחובר  

ציטוט:
נכתב במקור על ידי IgalSt צפה בהודעה
בנוסף אני ממליץ לעיין בדוגמה עם cache, כך שזה אמור להאיץ משמעותית את הביצועים שכן אתה לא תבצע קריאות AJAX מרובות, אלא לרוב רק פעם אחת.
לדוגמה אם אתה מחליט לבצע קריאת AJAX אחרי שהיוזר הזין 2 אותיות, אז יחזרו לך תוצאות. כשהוא יוסיף אות נוספת, אתה תעשה את הסינון מתוך התוצאות שחזרו לך לפני כן (כשהוא לך רק 2 אותיות). במקרה כזה בוודאי שאין צורך לקריאה נוספת שכן אם התוצאה נמצאת ב-DB, היא אחת מהתוצאות שכבר חזרו לך לפני כן.
cache זה תמיד טוב, אבל צריך לזכור שכנראה יוצגו לא יותר מ-10 תוצאות ב-autocomplete
במקרים של-2 אותיות הראשונות יש נגיד 1000 התאמות, ויחזרו רק 10, הסיכויים די גדולים שהאות הבאה לא תהיה ב-cache
כמובן שאפשר לשמור את כל ה-1000 תוצאות ולהציג את ה-10 הראשונות, אבל אז כבר סתם טענת יותר מידי מידע, כשהרבה בקשות כאלו מהרבה משתמשים כבר סתם יעמיסו על השרת
  Reply With Quote
ישן 02-08-12, 19:54   # 9
IgalSt
מנהל פורום, עסק רשום
 
IgalSt's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: המרכז
גיל: 37
הודעות: 1,432
Send a message via Skype™ to IgalSt

IgalSt לא מחובר  

ציטוט:
נכתב במקור על ידי Itay צפה בהודעה
cache זה תמיד טוב, אבל צריך לזכור שכנראה יוצגו לא יותר מ-10 תוצאות ב-autocomplete
במקרים של-2 אותיות הראשונות יש נגיד 1000 התאמות, ויחזרו רק 10, הסיכויים די גדולים שהאות הבאה לא תהיה ב-cache
כמובן שאפשר לשמור את כל ה-1000 תוצאות ולהציג את ה-10 הראשונות, אבל אז כבר סתם טענת יותר מידי מידע, כשהרבה בקשות כאלו מהרבה משתמשים כבר סתם יעמיסו על השרת
הנושא שאתה מעלה אכן נכון בהחלט.
עם זאת, בהחלט שכל מקרה לגופו. לפעמים תעדיף לטעון יותר מידע ולהציג רק חלק ממנו (אחרי הכל לבצע שאילתה אחת 10 פעמים זה יותר כבד מאשר שאילתה אחת שמחזירה פי 10 רשומות).
לחילופין, תוכל להגדיר כל מיני התחכמויות כמו לדוגמה לבצע חיפוש ראשוני אחרי 2 תווים, לאחר מכן כשהיוזר מקליד תווים נוספים תבצע חיפוש ב-cache. במקביל, אחרי כל תו שמוכנס, תראה אם היוזר ממשיך להקליד או לא. אם הוא הפסיק (טיימר פשוט, של נגיד 500ms), תבצע קריאה נוספת לשרת לקבלת כל הרשומות.
בצורה כזאת אתה מגיע לחווית משתמש חיובית - היוזר מרגיש הוא מבצע חיפוש מאוד מהיר ומקבל פידבק מיידי על כל תו שהוא מכניס. מבחינת יעילות אתה חוסך בגישות ל-DB.

זה רק תסריט אחד בלבד. באמת שכל מקרה לגופו. אולי דווקא האיטיות במקרה הספציפי איציק ברבי מציג נובעת בכלל ממחסור של אינדקסים נאותים ב-DB, או בכלל פעולות איטיות ב-backend.
  Reply With Quote
ישן 02-08-12, 20:06   # 10
Kernel
אושיית הוסטינג
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: בקעת אונו
הודעות: 2,429

Kernel לא מחובר  

אם כבר מדברים על אופטימזציה,
אם יש דפוס מסויים שחוזר על עצמו. למה לא להשתמש בקאש בbackend ולחסוך קריאות למסד.

יותר מזה, POST איטי יותר מ-GET:
ב-POST הדפדפן שולח קודם כל את ה-headers ורק אח״כ את ה-data, ב-GET ה-data הוא חלק מה-header (כן, זה מאוד משפיע ב-autocomplete).
__________________
אבי
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


כל הזמנים הם GMT +2. הזמן כעת הוא 22:51.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ