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.
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