• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak stworzyć obiek w JS zwróconego przez PHP formatu JSON

Object Storage Arubacloud
0 głosów
371 wizyt
pytanie zadane 19 listopada 2016 w PHP przez misiek.sz Bywalec (2,050 p.)
zmienione kategorie 19 listopada 2016 przez misiek.sz

Witam,

mam dane zwrócone przez zapytanie SELECT z bazy MySQL, które przekształcam funkcja json_encode na format JSON, teraz w JS odbieram sobie te dane tyle, że te dane są typu string, a ja bym chciał przekształcić je na literał obiektowy. próbowałem użyć JSON.parse ale wyskakuje błąd. Przy normalnej tablicy w PHP typu array("id" => 1); funkcja JSON.parse działa i otrzymuję w JS obiekt, ale z tablicami z MySQL to nie działa;/

Poniżej przykładowy kod:

 

$id = $_GET['id'];

$connetion->query("SET NAMES 'utf8");
        $SQL = "SELECT * FROM mapy where id='$id'";

    $result = $connetion->query($SQL);

    if(!$result) {
        echo'Błąd zapytania';
        return false;
        } else {

            $resultArray = array();
            while(($row = $result->fetch_array(MYSQLI_ASSOC)) !== NULL) {

                $resultArray[] = $row;
                }

             echo json_encode($resultArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
            }

 

i kod JS:

 

var xhr = new XMLHttpRequest();


xhr.open("GET", "mapa.php?id=670", true);


var sel = document.querySelector("[name=wojewodztwo");
sel.onchange = function() {

xhr.onreadystatechange = function() {
if(xhr.readyState === 4 && xhr.status === 200) {
   var res = xhr.response;

console.log(res);


}
};
xhr.send(null);
};

 

komentarz 19 listopada 2016 przez Ivan Maniak (60,650 p.)
Możesz podać przykładowego stringa wyrzucanego przez PHP.
Tego, którego nie da się przekształcić na obiekt.

Zmień kategorie.
komentarz 19 listopada 2016 przez efiku Szeryf (75,160 p.)
edycja 19 listopada 2016 przez efiku

"mapa.php?id=670; DROP TABLE mapy"

Mam lepszy link do requesta ;) 

Magia, nie? 

Tak właśnie można rozwalić Ci bazę.

Bo nie bindujesz parametrów.

smiley

 

komentarz 19 listopada 2016 przez misiek.sz Bywalec (2,050 p.)

kod JSON wygenerowany przez PHP:

 

[ { "id": "670", "wojewodztwo": "dolnośląskie", "powiat": "legnicki", "gmina": "Chojnów", "miejscowosc": "Chojnów", "ulica": "pl. Zamkowy 1", "kod": "59-225 Chojnów", "typ": "Urząd Miejski w Chojnowie", "email": "urzad.miejski@chojnow.net.pl", "www": "www.chojnow.eu", "tel": "(076) 818 82 85", "tel2": "", "fax": "(076) 8187515" } ]

 

komentarz 19 listopada 2016 przez efiku Szeryf (75,160 p.)
a czemu nie samo json_encode?

Przecież to jest poprawne. z tym, że to tablica w której jest jeden obiekt.

http://i.imgur.com/WtCq2RI.png
komentarz 19 listopada 2016 przez misiek.sz Bywalec (2,050 p.)
kurcze nie wiem jak Ty to zrobiłeś

mi w konsoli ciągle wyświetla że response to string
komentarz 19 listopada 2016 przez misiek.sz Bywalec (2,050 p.)
edycja 19 listopada 2016 przez misiek.sz
w konsoli jak sobie skopiuje ten string i dodam do tablicy to działa ale JSON.parse mi wyświetla błąd  Uncaught SyntaxError: Unexpected token o in JSON at position0
komentarz 19 listopada 2016 przez Ivan Maniak (60,650 p.)
edycja 20 listopada 2016 przez Ivan

Bo response "zawsze" będzie stringiem.
I ten string wkładasz w JSON.parse, a to przypisujesz sobie do jakiejś zmiennej. Gdy wrzuciłem odpowiedz, która dostajesz do JSON.parse normalnie dostałem obiekt.

Warto też od serwer posłać header z "Content Type: application/json" w PHP robisz to za pomocą header('Content-Type: application/json'). Dzięki temu przeglądarka wie, że to co dostała to nie kod HTML, a JavaScript gdy dostaje taką odpowiedz od razu ją przekłada na obiekt. (Co do JS to możliwe, nie jestem w 100% pewien, ale to można łatwo sprawdzić :))

komentarz 20 listopada 2016 przez misiek.sz Bywalec (2,050 p.)

header ustawiłem

w JS mam tak:

   var res = xhr.response;

  var res1 = JSON.parse(res);

console.log(res1);

a w konsoli błąd:

Uncaught SyntaxError: Unexpected token  in JSON at position 0

który wskazuje na zmienną res1

komentarz 20 listopada 2016 przez Ivan Maniak (60,650 p.)

A spróbuj wyświetlić sobie res

komentarz 20 listopada 2016 przez misiek.sz Bywalec (2,050 p.)
jak wykomentuje res1 to normalnie wyświetla  string w formie zapisu json ale jak nie wykomentuje res1 to wyskakuje ten sam syntax
komentarz 20 listopada 2016 przez Ivan Maniak (60,650 p.)

Powiem tak: u mnie działa. Popraw kod bo parę klamer oraz średników jest tam gdzie ich nie powinno być.

var xhr = new XMLHttpRequest();
  
xhr.open("GET", "http://httpbin.org/get", true);

xhr.onreadystatechange = function() {
  if(xhr.readyState === 4 && xhr.status === 200) {
    var res = xhr.response;
	var res1 = JSON.parse(res);
	
    console.log(res1); 
  }
}

xhr.send(null);

 

komentarz 20 listopada 2016 przez misiek.sz Bywalec (2,050 p.)

nie widzę błędów  w kodzie:

var sel = document.querySelector("[name=wojewodztwo");
var xhr = new XMLHttpRequest();
xhr.open("GET", "mapa.php?wojewodztwo=podlaskie", true);
sel.onchange = function() {

xhr.onreadystatechange = function() {

if(xhr.readyState === 4 && xhr.status === 200) {

   var res = xhr.response;

  var res1 = JSON.parse(res);

console.log(res);
}
};
xhr.send(null);
};

może ze zdarzeniem onchange to nie działa?

komentarz 20 listopada 2016 przez Ivan Maniak (60,650 p.)

Kod normalnie działa.

  <select name=wojewodztwo>
    <option>elo</option>
	<option>a</option>
  </select>
  <script>
var sel = document.querySelector("[name=wojewodztwo");
sel.onchange = function() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://httpbin.org/get", true);
 
xhr.onreadystatechange = function() {

if(xhr.readyState === 4 && xhr.status === 200) {
   // Obie wersje działają
   var res = '[ { "id": "670", "wojewodztwo": "dolnoslaskie", "powiat": "legnicki", "gmina": "Chojnów", "miejscowosc": "Chojnów", "ulica": "pl. Zamkowy 1", "kod": "59-225 Chojnów", "typ": "Urzad Miejski w Chojnowie", "email": "urzad.miejski@chojnow.net.pl", "www": "www.chojnow.eu", "tel": "(076) 818 82 85", "tel2": "", "fax": "(076) 8187515" } ]';
   var res = xhr.response;
 
	var res1 = JSON.parse(res);
 
console.log(res1);
}
};
xhr.send(null);
};

 

komentarz 20 listopada 2016 przez misiek.sz Bywalec (2,050 p.)
skoro kod javascript jest dobry to może robię cos źle w PHP?
komentarz 20 listopada 2016 przez efiku Szeryf (75,160 p.)
Nooo brak Ci wiedzy o asynchroniczności ;)
komentarz 20 listopada 2016 przez efiku Szeryf (75,160 p.)

I ponawiam

"mapa.php?id=670; DROP TABLE mapy"

Mam lepszy link do requesta ;) 

Magia, nie? 

Tak właśnie można rozwalić Ci bazę.

Bo nie bindujesz parametrów.

smiley

 

komentarz 20 listopada 2016 przez misiek.sz Bywalec (2,050 p.)
a no wiem, że mi brak wiedzy dlatego piszę

a powiedz mi o co chodzi z tym requestem

czemu mam usuwać tabelę?
komentarz 20 listopada 2016 przez efiku Szeryf (75,160 p.)

Nie rozumiesz? 

Tak właśnie można rozwalić Ci bazę.

Bo nie bindujesz parametrów.

Masz SQLInjection.

komentarz 20 listopada 2016 przez misiek.sz Bywalec (2,050 p.)
ale to tylko na szybko kod napisany, normalnie użyje PDO i będzie ok,

lepiej mi pomóż z tym ajaxem
komentarz 20 listopada 2016 przez misiek.sz Bywalec (2,050 p.)
ok wszystko już działa, miałem literówke w zmiennej $connection, dziwne, że w php nie wywalało tego błędu

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 569 wizyt
pytanie zadane 15 marca 2018 w JavaScript przez marcolo Obywatel (1,530 p.)
0 głosów
1 odpowiedź 1,545 wizyt
pytanie zadane 17 stycznia 2017 w JavaScript przez Tpk Nałogowiec (40,100 p.)
0 głosów
0 odpowiedzi 261 wizyt
pytanie zadane 29 czerwca 2017 w Java przez XtrEmE Nowicjusz (200 p.)

92,632 zapytań

141,500 odpowiedzi

319,879 komentarzy

62,012 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...