Вероятно, это проблема CORS, как сказал @Rup в комментариях. Из документации JQuery по опции contentType
для .ajax () вы видите это:
Для междоменных запросов установка типа содержимого, отличного от application / x-www-form-urlencoded, multipart / form-data или text / plain, заставит браузер отправлять предварительный запрос OPTIONS на сервер
При просмотре вкладки сети в вашем браузере вы увидите, что она отправляет запрос OPTION
. Фактически, просто удалив параметр contentType
, ваш код будет работать так, как ожидается.