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

Ajax nie chce wysłać mi zapytanie typu PUT

Object Storage Arubacloud
0 głosów
271 wizyt
pytanie zadane 22 lipca 2017 w JavaScript przez Jonki Dyskutant (8,180 p.)
edycja 22 lipca 2017 przez Jonki

Chcę wysłać do kontrolera nowy e-mail podany przez użytkownika za pomocą ajaxa

$.ajax({
            type: 'PUT',
            url: '/changeEmail?',
            data: {
                email: function() {
                    return $('#email').val();
                }
            },
            success: function(result) {
                console.log('function');
                if(result === true) {
                    console.log("true");
                } else {
                    console.log("false");
                }
            }
        });

do kontrolera(przykładowy kod)

@PutMapping("/changeEmail")
    public boolean changeEmail(
            @RequestParam("email") String email
    ) {
        System.out.println("email: " + email);
 
        return true;
    }

Jednak podczas wysyłki konsola przeglądarki wyrzuca mi

jquery-3.2.1.min.js:4 PUT http://localhost:8080/signIn net::ERR_TOO_MANY_REDIRECTS

Ajax próbuje wysłać dane na całkiem inny adres, niż ten który podałem w ajaxie.
W ajaxie podałem

/changeEmail

a on próbuje mi wysłać na

/signIn

O co tu chodzi?

EDIT: Jest to problem ajaxa, ponieważ zmodyfikowałem kod w taki sposób, aby forma była wysyłana bezpośrednio(bez javascript) i wtedy działa.
komentarz 22 lipca 2017 przez ScriptyChris Mędrzec (190,190 p.)

Na której podstronie jesteś w momencie wywoływania AJAX? Czy na "/signIn"? Czy próbowałeś wywołać AJAXa z innej podstrony - czy występuję wtedy przekierowanie na "/signIn", czy na adres aktualnej podstrony?

Pokaż kod HTML formularza.

[edit]

Pokaż jeszcze screen z zakładki Network/Sieć z dev toolsów w przeglądarce - a konkretnie informacje o wysłanym requeście.

komentarz 22 lipca 2017 przez Jonki Dyskutant (8,180 p.)
edycja 22 lipca 2017 przez Jonki
html: https://pastebin.com/WRy4F1KY js: https://pastebin.com/8eFTEPbj zakładka: https://zapodaj.net/866757d1be428.png.html Podczas wywoływania ajaxa jestem na "/changeEmail". Już wiem dlaczego wywoływana jest strona "signIn". Jest to strona, która wywołuje się kiedy, wywoływana jest strona, która nie istnieje. Jej kontroler dziedziczy z klasy 'ErrorController'. Wysyłanie metody 'PUT' bezpośrednio akcją z form działa. Prawdopodobnie jest problem między AJaxem a Springiem. Może trzeba coś skonfigurować. Ajax nie potrafi używać innych zapytań niż GET i POST. Wychodzi na to, że ajax nie widzi zmapowanego kontrolera 'changeEmail' typu 'PUT' i dlatego wywala domyślną stronę błędu, którą jest 'signIn'.
komentarz 22 lipca 2017 przez ScriptyChris Mędrzec (190,190 p.)

Będąc w zakładce Network zobacz sobie konkretny request (klikaj na poszczególne, aż znajdziesz ten którego szukasz - masz tam podane ich nazwy), wtedy pokaże się okienko ze szczegółami - URL, parametry, payload, nagłówki, autoryzacja. Możesz dzięki temu zweryfikować, czy wysłane zapytanie rzeczywiście zawiera te dane, które ustawiłeś. Jest tam również bezpośredni dostęp do zakładki preview i response, gdzie masz odpowiedź z serwera bez parsowania (czyli taką, jaką zwrócił serwer, np. w formacie JSON lub XML) albo czytelnie sparsowaną odpowiedź, którą wygodnie się czyta.

komentarz 22 lipca 2017 przez Jonki Dyskutant (8,180 p.)
https://zapodaj.net/f1b8ed0b2a16b.png.html z tego wynika, że kontroler został znaleziony i zostały wysłane dane. Jednak kontroler nic nie zwraca https://zapodaj.net/69875da973a1f.png.html. A raczej w Response Header zwraca właśnie tą stronę po błędzie 'signIn'.
komentarz 22 lipca 2017 przez ScriptyChris Mędrzec (190,190 p.)

EDIT: Jest to problem ajaxa, ponieważ zmodyfikowałem kod w taki sposób, aby forma była wysyłana bezpośrednio(bez javascript) i wtedy działa

Pokaż kod czystego JS.

    url: '/changeEmail?',

Czy metoda PUT na pewno pozwala na użycie znaku zapytania w URLu? 

Co wypisuje w konsoli backend? Docierają tam dane formularza?

komentarz 22 lipca 2017 przez Jonki Dyskutant (8,180 p.)

Tutam jest cały js tej strony https://pastebin.com/8eFTEPbj . Tylko walidacja i wysyłka.\

Bez znaku zapytania też nie działa.

Nie wiem czy znasz Spring, ale mam kontroler

@Controller
public class PageNotFoundController implements ErrorController{

    @RequestMapping("/error")
    public ModelAndView showPageError() {
        return new ModelAndView("redirect:/signIn");
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

który podejmuje określone akcje jeśli ktoś wpiszę nieprawidłowy URL podstrony itd. Tutaj właśnie przekierowuję na 'signIn'.

ajax nie potrafi znaleźć w ogóle kontrolera PUT 'changeEmail'.

Nie mogę znaleźć w internecie informacji, dlaczego ajax nie potrafi obsłużyć innego kontrolera niż typ GET i POST.

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

Podobne pytania

0 głosów
0 odpowiedzi 134 wizyt
pytanie zadane 23 lipca 2017 w JavaScript przez Jonki Dyskutant (8,180 p.)
0 głosów
0 odpowiedzi 110 wizyt
pytanie zadane 25 lipca 2017 w Java przez Jonki Dyskutant (8,180 p.)
0 głosów
2 odpowiedzi 831 wizyt
pytanie zadane 12 marca 2018 w PHP przez damian9901 Bywalec (2,140 p.)

92,552 zapytań

141,399 odpowiedzi

319,533 komentarzy

61,938 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!

...