Скорее всего у вас нет обработки OPTIONS запросов.
Зайдите во вкладку NETWORKS в инструментах разработчика в google chrome и просмотрите какие запросы отправляет браузер.
Обычно когда выполняется кроссдоменный запрос отличный от GET, перед ним отправляется запрос OPTIONS который должен сказать какие можно использовать запросы.
Вы можете прописать обработку OPTIONS запросов на той странице на которую подаете запрос
$method = $_SERVER['REQUEST_METHOD'];
if($method == "OPTIONS"){
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Accept, X-Requested-With, X-Accept-Charset,X-Accept,Content-Type,Accept-Language,Accept-Charset,X-Request-With,Content-Length,Accept,Origin");
header("Access-Control-Allow-Credentials: true");
header("Allow: GET, POST, PUT, DELETE, OPTIONS");
return "status: 200";
}