使用ajax将函数写入$ _POST

I want to create a function so I can send $_POST using ajax. I made code like this but it is not working.

function send(variable, value){
      var e = value;
      bar = variable;
      $.ajax({
            type: 'POST',
            url: "vote.php",
            data: {bar:e},
            success:function(){
            console.log(e);
            }
        });
  }

I can see the problem is that data{bar} is not getting the variable value. How can I make it so that I can get $_POST['dog'] = corgi when I write the function

send(dog, corgi)

and $_POST['cat'] = bengal when I write

send(cat, bengal)

Objects created like this do not interpret variables as property names, so bar as the property of an object is literally "bar". You need to create an object, and dynamically set properties using the variable in bracket notation.

Example:

function send(variable, value){
      var e = value;
      var data = {};
      data[variable] = value;
      $.ajax({
            type: 'POST',
            url: "vote.php",
            data: data,
            success:function(){
            console.log(e);
            }
        });
  }

Upvoted Alexander's answer - think he's technically spot on.

Two observations: in your example you state you want to use

send(cat, bengal)

Obv you either need variables called cat and bengal tho suspect you actaully want to use

send('cat', 'bengal')

Probably just a typeo / oversight in your original question...?

As an aside (I realise this doesn't directly answer OP), a more deterministic approach and closer to JS good practices would be to use $.extend and hand an "options" object in:

send({cat : "bengal"})

and internally use:

function send(options){
  var defaultData = {}; // your defaults here (can be closured off somewhere else other than here if you need to)

  $.ajax({
        type: 'POST',
        url: "vote.php",
        data: $.extend({}, defaultData, options || {}) // handle when you dont hand in options with the '|| {}' bit
    });

}

HTH