Alex
Alex

Reputation: 7688

Send array with $.post

I'm trying to execute a $.post() function with an array variable that contains the data, but it seams that I'm doing something wrong because it won't go or it's not possible

var parameters = [menu_name, file_name, status, access, parent, classes];
console.log(parameters);

$.post('do.php', { OP: 'new_menu', data: parameters }, function(result) {
     console.log(result);
}, 'json'); //Doesn't work

Firebug debug: NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument

So, which would be the propper way of doing it (if possible)?

Upvotes: 0

Views: 98

Answers (4)

Alex
Alex

Reputation: 7688

Ok, so with the help of these StackOverflow fellows I managed to make it work just the way I wanted:

var parameters = {
       'name': menu_name.val(),
       'file': file_name.val(),
       'status': status.val(),
       'group': group.val(),
       'parent': parent.val(),
       'classes': classes.val()
};

$.post('do.php', { OP: 'new_menu', data: parameters }, function(result) {
    console.log(result);
}, 'json');

Upvotes: 0

Pedro L.
Pedro L.

Reputation: 7536

Use JSON.stringify()
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify

$.post('do.php', {
        OP: 'new_menu',
        data: JSON.stringify(parameters)
    },
    function(result) {
        console.log(result);
    },
    'json'
);

And then, in the server-side use json_decode() to convert to a php array.
http://php.net/manual/es/function.json-decode.php

Upvotes: 1

Sam Adams
Sam Adams

Reputation: 5827

Could be the variables in the parameters array

Having ran your code and supplemented the parameters for something like:

var parameters = ['foo','bar'];

It seems to work fine. I think the problem must be in the variables that you are passing as part of the array. i.e. are menu_name, file_name, status, access, parent and classes variables all as you expect them to be? e.g. console log them and see what they are coming out as. One might be an object which doesn't convert to json.

Upvotes: 1

Safari
Safari

Reputation: 3382

i am using for such kind of issues always the $.ajax form like this:

$.ajax({
  url: 'do.php',
  data: {
      myarray: yourarray
  },
  dataType: 'json',
  traditional: true,
  success: function(data) {
     alert('Load was performed.');
  }
});

the traditional is very important by transfering arrays as data.

Upvotes: 1

Related Questions