Wątek przeniesiony 2017-07-25 11:34 z Java przez Koziołek.

Ajax nie potrafi wysłać zapytania innego niż GET

0

No po prostu no nie mogę. Od 4 dni męczę się z wysłaniem danych ajaxem inną metodą niż GET i nie daję rady. Tworzę projekt w Spring Boot. Mam stworzony kontroler z mapowanym adresem

@PutMapping(value = "/changeEmail")
    public boolean changeEmail(
            @RequestBody ChangeEmailDTO changeEmailDTO
    ) {
        System.out.println("email: " + changeEmailDTO.getEmail());

        return true;
    }

Ten kontroler ma przyjąć adres e-mail wysłany przez ajaxa

function changeEmail() {
        console.log("Event");
        $.ajax({
            type: 'PUT',
            url: '/changeEmail',
            data: {
                email: $('#email').val()
            },
            success: function (result) {
                console.log('function');
            }
        });
    }

Jednak jedyny efekt jest taki, że w konsoli wywala mi

PUT http://localhost:8080/signIn net::ERR_TOO_MANY_REDIRECTS
send	@	jquery-3.2.1.min.js:4
ajax	@	jquery-3.2.1.min.js:4
changeEmail	@	settings.js:58
submitHandler	@	settings.js:52
d	@	jquery.validate.min.js:4
(anonymous)	@	jquery.validate.min.js:4
dispatch	@	jquery-3.2.1.min.js:3
q.handle	@	jquery-3.2.1.min.js:3

DTO posiada tylko jedno pole

public class ChangeEmailDTO {

    @IsValidEmail
    @ExistsEmail(ifExistsReturn = false)
    @Getter @Setter private String email;
}

Po próbie wysłania danych przez ajaxa przerzuca mnie na kontroler błędu

@Controller
public class PageNotFoundController implements ErrorController{

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

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

Screen z narzędzia przeglądarki co wysyłane i odbierane: https://zapodaj.net/f1b8ed0b2a16b.png.html
Jak wspomniałem, kontroler poprawnie potrafi odebrać z ajaxa tylko zapytanie GET. Przy każdym innym przerzuca na kontroler błędu.
Dodatkowo wspomną, że jeśli chciałbym wysłać dane bezpośrednio z formy, to wtedy nie ma problemu z żadnym zapytanie.
Co ten ajax odwala, to ja nie wiem.

0

Spróbuj tak:

$ curl -X PUT -H "Content-Type: application/json" -d '{"email":"[email protected]"}' localhost:8080/changeEmail

Jeżeli to przejdzie, to problem jest po stronie przeglądarki.

Tak btw. to nie wylogowuje Cie przypadkiem?

PUT http://localhost:8080/**signIn** net::ERR_TOO_MANY_REDIRECTS

1 użytkowników online, w tym zalogowanych: 0, gości: 1