דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. קבלת מערך מphp

קבלת מערך מphp

מתוזמן נעוץ נעול הועבר תכנות
11 פוסטים 3 כותבים 932 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • chagoldC מנותק
    chagoldC מנותק
    chagold
    כתב ב נערך לאחרונה על ידי chagold
    #1

    עשיתי פונקציה בPHP שמחזירה מערך, ומשום מה אני לא מצליח לקבל את המערך בגישת קליינט (דרך הדפדפן). רק כשניגשים מתוך הקוד בשרת לקלאס אז אפשר לטפל בARRAY.
    איך ניתן לקבל את המערך כקליינט?
    נ.ב. המטרה לקבל את הפונקציה היא בJS.
    תודה רבה

    clickoneC תגובה 1 תגובה אחרונה
    0
    • clickoneC מנותק
      clickoneC מנותק
      clickone
      השיב לchagold ב נערך לאחרונה על ידי
      #2

      @chagold לכאורה אתה אמור להמיר אותו לJSON
      הנה דוגמא
      https://www.w3schools.com/js/js_json_php.asp

      אין טסט כמו פרודקשן.

      המייל שלי urivpn@gmail.com

      תגובה 1 תגובה אחרונה
      2
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #3

        אתה לא חייב JSON, אבל אתה חייב תוכן "מת" (לאפוקי אובייקטי תכנות) בינארי או טקסטואלי.
        אבל תשכח מבינארי, בתקשורת דפדפן-שרת מקובל לעבוד רק עם טקסט:
        א. את הקומפקטיות של הבינארי משאירים לשרת האינטרנט ולדפדפן לעשות
        ב. מרויחים קריאות וקלות דיבאג, ואי תלות בפלטפורמה או בטכנולוגיה (בדרך כלל פורמט קומפקטי די כובל לממירים שנכתבו עבורו).

        פורמטי טקסט יש הרבה אך המקובל ביותר הוא JSON, הוא נתמך בצורה הכי קלה בJS, והוא גם קומפקטי ועם זאת עדיין קריא במידה מסויימת.

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        2
        • chagoldC מנותק
          chagoldC מנותק
          chagold
          כתב ב נערך לאחרונה על ידי
          #4

          כשאני מקבל אותו בJSON הוא נראה ככה :

           [{"id":"1","text":"copy.jpg"},{"id":"2","text":"copy.jpg"}]
          

          אבל אני לא מצליח לקרוא אותו בJS. אולי כיון ששם המערכים נקראים ככה (בלי הגרשיים על שם השדה):

           {id: "1", text: "copy.jpg"}
           {id: "2", text: "copy.jpg"}
          

          אני צודק? אם כן איך ממירים אותו?
          תודה.

          תגובה 1 תגובה אחרונה
          0
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            כתב ב נערך לאחרונה על ידי dovid
            #5

            אתה טועה למחצה. הפורמט של JSON הוא JS תקין, אלא שאתה מקבל אותו כמחרוזת טקסט ולא כאובייקטי JS, ולכן אתה אכן צריך להמיר אותו.
            זה מתבצע ע"י הפונקציה JSON.pars היא מקבלת טקסט ומחזירה את התוכן כאובייקטי JS:

            JSON.parse('[{"id":"1","text":"copy.jpg"},{"id":"2","text":"copy.jpg"}]');
            

            אתה צריך להעביר לה כארגומנט את התשובה שהPHP מחזיר.

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה
            2
            • chagoldC מנותק
              chagoldC מנותק
              chagold
              כתב ב נערך לאחרונה על ידי chagold
              #6

              אני מצליח לקבל את התשובה ולהמיר אותה, אבל לא מצליח להוציא אותה מהפונקציה לסקופ גבוה יותר בJS בשביל להחזיר את הערכים שאני צריך.

              הפונקציה היא כזו.

               function Listprofile() {  
              var xhttp;
              var grocerList = [];
              xhttp = new XMLHttpRequest();
              
              xhttp.onreadystatechange = function() {
                  if (this.readyState == 4 && this.status == 200) {
                     grocerList = JSON.parse([this.responseText]) //השורה שמקבלת את התוצאה.          
                  }       
              };
              
              xhttp.open("GET", "index.php?p="+'get_profiles&user=1', true);
              xhttp.send(); 
              
              return grocerList
                       
              }
              
              תגובה 1 תגובה אחרונה
              0
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                כתב ב נערך לאחרונה על ידי dovid
                #7

                הטעות שלך קשורה לאסינכרוניות של JS.
                בJS, כל פעולה ממושכת, הקוד שאחריה מתבצע מיידית עוד לפני סיומה. ממילא בקוד שלך למשל השורה הxhttp.send() היא ממושכת, והשורה return grocerList, מתבצעת מיידית עוד לפניה!
                האם זה אומר שאין סדר בJS? לא, כי באמת קודם מורץ הxhttp.send() אבל בתצורת "שגר ושכח".
                אם ככה איך אתה יכול להשתמש בנתונים שחוזרים? רק ע"י העברה של הלוגיקה הנדרשת לקאלבאק. קלאבאק, זה כינוי לפונקציה שמתבצעת כשהתהליך ה"ארוך" נגמר.
                במקרה שלך שמת שם הצבה לgrocerList. אז זהו שזה לא מספיק. עליך לשים שמה את כל מה שאתה רוצה שיקרה אז! זה נשמע מרתיע, אבל בהתחשב בעובדה שאתה יכול להעביר פונקציות כפרמטרים, זה נהיה לא לאט דרך חיים קלה - שהיא הרך היחידה בJavaScript.
                למשל, אם אתה רוצה שבלחיצת כפתור יוצגו נתונים בJS, אתה תעשה משהו בסגנון:

                var btn = document.getElementsByTagName("button")[0];
                
                
                btn.addEventListener("click", function () {
                    downloadData(addContentToHtml);
                });
                
                function addContentToHtml(content) {
                    var asObj = JSON.parse(content);
                    var div = document.getElementsByTagName("div")[0];
                    for (var index in asObj) {
                        var node = document.createElement("span");
                        var textnode = document.createTextNode(asObj[index]);
                        node.appendChild(textnode);
                        div.appendChild(node);
                    }
                
                }
                
                function downloadData(doAtEnd) {
                    xhttp = new XMLHttpRequest();
                    xhttp.onreadystatechange = function () {
                        if (this.readyState == 4 && this.status == 200) {
                            doAtEnd(this.responseText);
                            //document.getElementById("demo").innerHTML = this.responseText;
                        }
                    };
                    xhttp.open("POST", "https://httpbin.org/post", true);
                    xhttp.send();
                }
                

                מה שקורה בקוד זה שאני מעביר לפונקציה downloadData בפרמטר את פונקציית ההמשך (addContentToHtml) שתתרחש אחרי שפעולת הבקשה תסתיים.
                הנה קוד לדוגמא: https://jsfiddle.net/098fc3ew/

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                תגובה 1 תגובה אחרונה
                3
                • chagoldC מנותק
                  chagoldC מנותק
                  chagold
                  כתב ב נערך לאחרונה על ידי
                  #8

                  למעשה הפונקציה לא מחזירה את הערך בRETURN אלא מיישמת את זה עצמאית בשטח.
                  אין אפשרות שהיא תחזיר אותו לפונקציה?

                  dovidD תגובה 1 תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    השיב לchagold ב נערך לאחרונה על ידי
                    #9

                    @chagold אמר בקבלת מערך מphp:

                    למעשה הפונקציה לא מחזירה את הערך בRETURN אלא מיישמת את זה עצמאית בשטח.
                    אין אפשרות שהיא תחזיר אותו לפונקציה?

                    לא מבין, תרחיב.
                    כמו כן תבדוק שהבנת טוב את הדוגמא שנתתי (אם לא, שאל!).

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    chagoldC תגובה 1 תגובה אחרונה
                    0
                    • chagoldC מנותק
                      chagoldC מנותק
                      chagold
                      השיב לdovid ב נערך לאחרונה על ידי
                      #10

                      @dovid
                      בדוגמא שהבאת, הפונקציה addContentToHtml (שהיא פרמטר בdownloadData) מבצעת שינוי (בינדינג) על אלמנטים בHTML.
                      אני השתמשתי עם הדוגמא הזו בשביל שינוי של משתנים אחרים בJS.
                      השאלה איך אני במקום לעשות שינוי אני רק מקבל איזה פרמטר ונון אותו כערך לפונקציה עצמה, כדי שכשאני עושה

                        var xx = fff(peremeter)
                      

                      אז fff יהיה ערך אמיתי.

                      תגובה 1 תגובה אחרונה
                      0
                      • dovidD מנותק
                        dovidD מנותק
                        dovid ניהול
                        כתב ב נערך לאחרונה על ידי
                        #11

                        שים את ההשמה בפונקציית הקאלבק.
                        כלומר במקום שינוי בhtml תעשה השמה למשתנה.
                        אין דרך בJS, לקבל ערך מפעולה שאורכת זמן (מהסוגים האסינכרוניים, למעט למשל alert וכיוצ"ב) בלי להשתמש בקאלבק.

                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                        תגובה 1 תגובה אחרונה
                        1

                        בא תתחבר לדף היומי!
                        • התחברות

                        • אין לך חשבון עדיין? הרשמה

                        • התחברו או הירשמו כדי לחפש.
                        • פוסט ראשון
                          פוסט אחרון
                        0
                        • דף הבית
                        • קטגוריות
                        • פוסטים אחרונים
                        • משתמשים
                        • חיפוש
                        • חוקי הפורום