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

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

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

קבלת מערך מphp

מתוזמן נעוץ נעול הועבר תכנות
11 פוסטים 3 כותבים 932 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • 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
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום