Avatar billede suulut_sdj Juniormester
13. februar 2022 - 10:46 Der er 13 kommentarer og
2 løsninger

$.get(url, (data){}

Jeg bruger $.get(url, (data){} til at hente dat afra min mysql via en php side. Men jeg kan ikke få oprettet et array i javascript udfra de hentede data.
echo fra min php fil:
[{"kunde_id":"1","navn":"Test 1","adresse":"Testvej 1","postnr":"1000","city":"Testby 1"},{"kunde_id":"2","navn":"Test 2","adresse":"Testvej 2","postnr":"1717","2000":"Testby2"}]
java script:
GetId = 1
$.get("url/partner_id=" + GetId, function(data, stat)
        {
            document.getElementById("test").value = stat;
            var partner;
            var js1;
            var js2;
            //dette er input fra url filen's echo: [{"kunde_id":"1","navn":"Test 1","adresse":"Testvej 1","postnr":"1000","city":"Testby 1"},{"kunde_id":"2","navn":"Test 2","adresse":"Testvej 2","postnr":"1717","2000":"Testby2"}]

js1 = '[{"kunde_id":"1","navn":"Test 1","adresse":"Testvej 1","postnr":"1000","city":"Testby 1"},{"kunde_id":"2","navn":"Test 2","adresse":"Testvej 2","postnr":"1717","city":"Testby2"}]';

js2 = [{"kunde_id":"1","navn":"Test 1","adresse":"Testvej 1","postnr":"1000","city":"Testby 1"},{"kunde_id":"2","navn":"Test 2","adresse":"Testvej 2","postnr":"1717","city":"Testby2"}];
            var nydata;
            //nydata = JSON.stringify(data);
                      // partner = JSON.parse(nydata);
            partner = JSON.parse(data);
                      // partner = js2; virker som det skal der er 2 muligheder i option
            console.log(data); :
                      console.log(nydata);
            console.log(partner);
            var x = document.getElementById("kunde");
            const entries = Object.entries(partner);
            var text ="";
            var value="";
            for (var i = 0; i < partner.length; i++)
            {
                var option = document.createElement("option");
                option.text = partner[i].navn + " - " + partner[i].adresse + "
                              - " + partner[i].postnr + " - " + partner[i].city;
                option.value = partner[i].id;
                x.add(option);
            }
        });
Hvis jeg bruger partner = data; er alle data undefined,
jeg jeg bruger :
//nydata = JSON.stringify(data);
// partner = JSON.parse(nydata);
Så er data undefines
hvis jeg bruger partner = JSON.parse(data);  så får jeg denne fejl i console:
VM6309:1
       
      Uncaught SyntaxError: Unexpected token  in JSON at position 1
    at JSON.parse (<anonymous>)
    at Object.success (<anonymous>:19:19)
    at j (jquery.js:3148:30)
    at Object.fireWith [as resolveWith] (jquery.js:3260:7)
    at x (jquery.js:9314:14)
    at XMLHttpRequest.b (jquery.js:9718:8)
hvordan får jeg oprettet mit array fra php filen ?
Avatar billede erikjacobsen Ekspert
13. februar 2022 - 11:14 #1
Så må der jo stå noget mere i "data" fra dit $.get kald.

Skriv den ud som det første i funktionen, alert og/eller console.log
Avatar billede suulut_sdj Juniormester
13. februar 2022 - 11:27 #2
partner = data;
console.log(data); :
[{"kunde_id":"1","navn":"Test 1","adresse":"Testvej 1","postnr":"1000","city":"Testby 1"},{"kunde_id":"2","navn":"Test 2","adresse":"Testvej 2","postnr":"1717","2000":"Testby2"}]
partner = js2;
console.log(js2);:
0:
adresse: "Testvej 1"
city: "Testby 1"
kunde_id: "1"
navn: "Test 1"
postnr: "1000"
[[Prototype]]: Object
1:
adresse: "Testvej 2"
city: "Testby2"
kunde_id: "2"
navn: "Test 2"
postnr: "1717"

Ser ud som om at data kommer ind som en string, men bliver ikke omdannet til et array, teksten i data(php echo) og js 2 er den samme...
Avatar billede erikjacobsen Ekspert
13. februar 2022 - 11:40 #3
Vi har nok at gøre med et "usynligt" tegn før dit "["-tegn.

Fejlbeskeden for dette:

var a = ' x[{"kunde_id":"1","navn":"Test 1","adresse":"Testvej 1","postnr":"1000","city":"Testby 1"},{"kunde_id":"2","navn":"Test 2","adresse":"Testvej 2","postnr":"1717","2000":"Testby2"}]';

var b = JSON.parse(a);

er:

SyntaxError: Unexpected token x in JSON at position 1

Din fejlbesked er:  Unexpected token  in JSON at position 1 
hvor der ikke står noget efter "token" - dvs. usynligt tegn.

Hmm. Det kan også være lige efter "[".
Avatar billede suulut_sdj Juniormester
13. februar 2022 - 11:50 #4
hvordan får jeg udskrevet den importerede string som den importeres.
I php har jeg fjernet første og sidste tegn i den string der bliver skrevet. Men så fjerner jer [ og ] hvilket jo ikke er meningen...
Avatar billede erikjacobsen Ekspert
13. februar 2022 - 11:56 #5
Det er svært at se på afstand. Du skal selvfølgelig beholde "[" og "]".

Men prøv at sætte 7 mellemrum ind i din udskrift i PHP lige før "[".  Hvis fejlbeskeden siger noget andet end "position 1", så har vi en spor at gå efter.

Hvis den fortsat siger "position 1", så er det noget der sker i dit PHP før du skriver "[" - måske mange linjer før.
Avatar billede erikjacobsen Ekspert
13. februar 2022 - 12:04 #6
Og så kommer jeg jo lige i tanke om noget. Hvis dit PHP-script er gemt som UTF8 med BOM ("beginning of message", sådan cirka), så leveres der 3 "usynlige" tegn inden dit PHP går i gang med at udføres.

Check encoding i din editor.
Avatar billede erikjacobsen Ekspert
13. februar 2022 - 12:05 #7
Ja, BOM betyder faktisk Byte Order Mark. Men det er ligemeget her.
Avatar billede suulut_sdj Juniormester
13. februar 2022 - 12:12 #8
php fil er gemt som utf-8 uden bom
der er nu 7 mellemrum før [
Uncaught SyntaxError: Unexpected token  in JSON at position 1
    at JSON.parse (<anonymous>)
    at Object.success (<anonymous>:19:19)
    at j (jquery.js:3148:30)
    at Object.fireWith [as resolveWith] (jquery.js:3260:7)
    at x (jquery.js:9314:14)
    at XMLHttpRequest.b (jquery.js:9718:8)
Avatar billede erikjacobsen Ekspert
13. februar 2022 - 12:16 #9
Ja, BOM betyder vist alligevel ikke noget - mit eksperiment uden JQuery gav ikke den fejl.

Så du må have output før du skriver din JSON-tekst ud. Enten som print, echo, eller før den første <?php
Avatar billede erikjacobsen Ekspert
13. februar 2022 - 12:28 #10
På et senere tidspunkt får du nok andre problemer, når der står "2000":"Testby2"  og ikke  "city":"Testby2"
Avatar billede erikjacobsen Ekspert
13. februar 2022 - 12:42 #11
Ok - nu har jeg prøvet noget andet: simpelthen copy-pasted din fejlbesked her fra eksperten, og decodet den tegn for tegn:

0000000  U  n  e  x  p  e  c  t  e  d      t  o  k  e  n
          6e55    7865    6570    7463    6465    7420    6b6f    6e65
0000020    357 273 277      i  n      J  S  O  N      a  t   
          ef20    bfbb    6920    206e    534a    4e4f    6120    2074


Der står faktisk en BOM:  357 273 277  lige der efter token.
Avatar billede suulut_sdj Juniormester
13. februar 2022 - 14:40 #12
Det er en tastefejl, jeg har ikke kopieret den egentlige data fra min DB, men selv udfyldt values med testby osv. fik skrevet forkert med 2000 og city :-/

Hvad betyder den bom du har fundet, og hvordan pokker får jeg dette rettet.
Og mange mange tak for din her på en søndag :-)
Avatar billede erikjacobsen Ekspert
13. februar 2022 - 14:47 #13
Hvad skal man ellers lave en søndag ... ?  ;)

Den kommer fra din php fil, eller fra en includeret php/html-fil. Svært at sige på afstand ...
Avatar billede suulut_sdj Juniormester
13. februar 2022 - 17:25 #14
fejlen lå i den php fil som henter data fra MYSQL. Det er en fil oprettet som en class med  funktioner som bliver kaldt via min url i JQuery funktionen.
Når jeg kalder databasen fra den fil som skriver resultatet virker det hele.
Hvad problemet så end er med min class fil, ja det er så et mysterium.
1. $.get("url.php?partner_id=" + GetId, function(data, stat)
2 url.php?partner_id= kalder en php fil med en class som henter data fra mysql/ det er denne fil der lavaer balladen
Avatar billede erikjacobsen Ekspert
13. februar 2022 - 17:59 #15
Så i toppen af den class-fil står den en BOM. Tag den en tur igennem en fornuftig editor.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester