Извините, ребята, у меня на странице была запись $ .ajaxSetup, которая переопределяла тип содержимого по умолчанию для application / json.
При использовании стандартного типа содержимого следующим образом:
$.ajax({ url,
type: "POST",
contentType: "application/x-www-form-urlencoded",
success: function(result) { alert(result); },
data: { name: "John" }
});
Это работает, потому что processData имеет значение true по умолчанию, что означает, что запись данных с объектом JSON будет проанализирована в строку (data: "name = John" также работает).
Извините, что потратил ваше время :) и спасибо Марку за предложение о передаче объектов JSON, в следующий раз я сделаю это, потому что это выглядит очень круто.