views:

50

answers:

3

How would I make an associative array (or some comparable alternative) in jQuery AND send that array via ajax to a php page so that I can use php to handle it?

Something like this...

// jQuery

if($something == true) {
    data[alt] = $(this).attr('alt');
    data[src] = $(this).attr('src');
else if ($something == "something else") {
    data[html] = $(this).html();
}

Then, send this array using the .ajax() function

// jQuery

$.ajax({
    data: /* somehow send my array here */,
    type: 'POST',
    url: myUrl,
    complete: function(){
        // I'll do something cool here
    }
});

Finally, parse this data with php...

// php

<img alt="<?PHP echo $_POST['alt']; ?>" src="<?PHP echo $_POST['src']; ?>" />

I've done a little googling on the subject and have read that you cannot make an associative array with javascript so I'm really just looking for some alternative. Thanks in advance.

+1  A: 

You can pass the data as an object to $.ajax(), like this:

var data = {};
if ($something == true) {
    data.alt = $(this).attr('alt');
    data.src = $(this).attr('src');
}else if ($something == "something else") {
    data.html = $(this).html();
}

$.ajax({
    data: data,
    type: 'POST',
    url: myUrl,
    complete: function(){
        // I'll do something cool here
    }
});

This will get serialized for the post, internally using $.param(obj) to convert it for the POST, for example:

alt=thisAlt&src=thisSrc

or:

html=myEncodedHtml
Nick Craver
How would I get echo these out with php?
Johnny Freeman
@Johnny - Like you already have in the question, e.g. `$_POST['alt']`
Nick Craver
A: 

Won't it be simpler to just send some json to the php side, then use the json_decode function in php to get an associative array on the php side?

ShiVik
A: 

Associative array is sortof a PHP thing. But you can have something similar via curly braces ({}). In fact, you're already using it in your $.ajax() call. Notice the '{}' parts. In this case, you can use json_decode() in the PHP server to decode the 'data' parameter:

// jquery
$.ajax({
url: myUrl,
data: {
foo: 0,
bar: 1,
baz: 2
},
success: function() {
},
dataType: 'json'
});

Using json_decode() will get you something like:

// php array('foo' => 0, 'bar' => 1, 'baz' => 2);

Wayne Khan
How would I add a key/value one at a time like in my code above?
Johnny Freeman
var data = {}; data['foo'] = 0;
Wayne Khan