Czy istnieje sposób na przesłanie danych metodą POST bez formularza i bez odświeżania strony przy użyciu wyłącznie czystego JavaScript (nie jQuery $.post()
)? Może httprequest
lub coś innego (po prostu nie mogę tego teraz znaleźć)?
138
Odpowiedzi:
Możesz go wysłać i wstawić dane do treści:
Przy okazji, na żądanie:
źródło
[Nowość w momencie pisania w 2017 r.] Fetch API ma na celu ułatwienie żądań GET, ale jest również w stanie POST.
Jeśli jesteś tak leniwy jak ja (lub po prostu wolisz skrót / pomocnik):
źródło
Możesz użyć
XMLHttpRequest
obiektu w następujący sposób:Ten kod zostanie wysłany
someStuff
dourl
. Po prostu upewnij się, że kiedy tworzysz swójXMLHttpRequest
obiekt, będzie on kompatybilny z różnymi przeglądarkami. Istnieje nieskończona ilość przykładów, jak to zrobić.źródło
someStuff
?someStuff
może to być wszystko, co chcesz, nawet prosty ciąg. możesz sprawdzić prośbę, korzystając z usług online, takich jak mój osobisty ulubiony: ( requestb.in )application/x-www-form-urlencoded
typ MIME nie posiadacharset
parametr: iana.org/assignments/media-types/application/...Ponadto, relaksującego pozwala uzyskać dane z powrotem z POST żądanie.
JS (wstaw static / hello.html, aby wyświetlać przez Python):
Serwer Python (do testów):
Dziennik konsoli (chrom):
Dziennik konsoli (firefox):
Dziennik konsoli (Edge):
Dziennik Pythona:
źródło
Istnieje prosty sposób na zawinięcie danych i wysłanie ich na serwer, tak jakbyś wysyłał formularz HTML przy użyciu
POST
. możesz to zrobić używającFormData
obiektu w następujący sposób:teraz możesz obsługiwać dane po stronie serwera, tak jak w przypadku reugularnych formularzy HTML.
Dodatkowe informacje
Zaleca się, aby nie ustawiać nagłówka Content-Type podczas wysyłania FormData, ponieważ zajmie się tym przeglądarka.
źródło
FormData
utworzy żądanie formularza wieloczęściowego zamiastapplication/x-www-form-urlencoded
żądanianavigator.sendBeacon ()
Jeśli po prostu potrzebujesz
POST
danych i nie potrzebujesz odpowiedzi z serwera, najkrótszym rozwiązaniem byłoby zastosowanienavigator.sendBeacon()
:źródło
navigator.sendBeacon
moim zdaniem nie jest przeznaczony do tego celu.Możesz użyć XMLHttpRequest, pobrać API, ...
Jeśli chcesz użyć XMLHttpRequest, możesz wykonać następujące czynności
Lub jeśli chcesz użyć interfejsu API pobierania
źródło
Czy wiesz, że JavaScript ma wbudowane metody i biblioteki do tworzenia formularzy i przesyłania ich?
Widzę tutaj wiele odpowiedzi, z których wszystkie proszą o skorzystanie z biblioteki innej firmy, co moim zdaniem jest przesadą.
Zrobiłbym następujące rzeczy w czystym JavaScript:
W ten sposób (A) nie musisz polegać na firmach trzecich, aby wykonać swoją pracę. (B) To wszystko jest wbudowane we wszystkie przeglądarki, (C) szybciej, (D) działa, nie wahaj się go wypróbować.
Mam nadzieję, że to pomoże. H.
źródło