Muszę wysłać JSON (który mogę zdefiniować) na serwer i pobrać wynikowy JSON po stronie użytkownika, bez używania JQuery.
Jeśli powinienem użyć GET, jak przekazać JSON jako parametr? Czy istnieje ryzyko, że potrwa to zbyt długo?
Jeśli powinienem używać POST, jak ustawić odpowiednik onload
funkcji w GET?
Czy powinienem użyć innej metody?
UWAGA
To pytanie nie dotyczy wysyłania prostego AJAX. Nie należy go zamykać jako duplikat.
javascript
json
post
get
xmlhttprequest
Jérôme Verstrynge
źródło
źródło
XMLHttpRequest
. Niezależnie od nazwy, możesz jej użyć dla danych JSON (i tak właśnie robi to jQuery w tle).sending
żądania AJAX, co jest dość ogólną rzeczą. Ten prosi osending
ale iwreceiving JSON
czystym JavaScript. Ponadto, aby odesłać ten JSON z powrotem, musisz wiedzieć, jak rozwiązać tę część problemu,server-side
która jest inną rzeczą, o której nie wspomniano w przywoływanym pytaniu.onreadystatechange
jest tym, czego używasz do emulacjionload
, jak pokazano w zaakceptowanej odpowiedzi poniżej. Do parsowania wystarczy użyćJSON.parse()
(ponownie, jak pokazano w odpowiedzi), ale zakładałem, że już o tym wiesz, ponieważ wspomniałeś o ciągnieniu w pytaniu. Próbowałem ci pomóc, wskazując na nie jedno, ale dwa pytania dotyczące tych punktów. Jest oczywiście pewna różnica - rzadko dwa pytania są dokładnie identyczne - ale jest to trywialne, jeśli już wiesz, jak zdefiniować i przeanalizować JSON. To powiedziawszy, ponieważ ty i @ hex494D49 nie zgadzacie się, nominuję to do ponownego otwarcia.Odpowiedzi:
Wysyłanie i odbieranie danych w formacie JSON metodą POST
Wysyłanie i odbieranie danych w formacie JSON metodą GET
Obsługa danych w formacie JSON po stronie serwera przy użyciu PHP
Limit długości żądania HTTP Get zależy zarówno od serwera, jak i używanego klienta (przeglądarki) i wynosi od 2kB do 8kB. Serwer powinien zwrócić status 414 (żądanie-URI zbyt długie), jeśli identyfikator URI jest dłuższy niż serwer może obsłużyć.
Uwaga Ktoś powiedział, że mogę używać nazw stanów zamiast ich wartości; innymi słowy, mógłbym użyć
xhr.readyState === xhr.DONE
zamiastxhr.readyState === 4
. Problem polega na tym, że Internet Explorer używa różnych nazw stanów, więc lepiej jest używać wartości stanu.źródło
xhr.status === 200
.XHR failed loading: POST
Korzystanie z nowego pobierania interfejsu API :
źródło
JSON.stringify
dwa razy.