• 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

Cloud VPS
0 głosów
391 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 156 wizyt
pytanie zadane 23 lipca 2017 w JavaScript przez Jonki Dyskutant (8,180 p.)
0 głosów
0 odpowiedzi 139 wizyt
pytanie zadane 25 lipca 2017 w Java przez Jonki Dyskutant (8,180 p.)
0 głosów
2 odpowiedzi 1,059 wizyt
pytanie zadane 12 marca 2018 w PHP przez damian9901 Bywalec (2,140 p.)

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 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

Kursy INF.02 i INF.03
...