通过Ajax将Javascript对象发送到PHP

I'm learning Ajax by failure and have hit a wall:

I have an array (if it matters, the array is storing number id's based on what checkboxes the user checks) that is written in Javascript.

I have a function that is called when the user clicks the 'save' button. The function is as follows:

function createAmenities() {
    if (window.XMLHttpRequest) {
        //code for IE7+, Firefox, Chrome and Opera
        xmlhttp = new XMLHttpRequest();
    }
    else {
        //code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById('message').innerHTML = xmlhttp.responseText;
        }
    }

    var url = "create_amenities.php";

    xmlhttp.open("GET", url, true);

    xmlhttp.send();

}

My question is: What can I put in this function to pull the array into the php script I'm trying to call ('create_amenities.php')?

furthermore, should I try using JSON? And if so, how could I send a JSON object via ajax?

Thanks in advance.

If your array has more then 1 dimension or is an associative array you should use JSON.

Json turns a complete array structure into a string. This string can easily send to your php application and turned back into a php array.

More information on json: http://www.json.org/js.html

var my_array = { ... };
var json = JSON.stringify( my_array );

In php you can decode the string with json_decode:

http://www.php.net/manual/en/function.json-decode.php

var_dump(json_decode($json));

Loop over the array and append encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&' to the query string each time.

furthermore, should I try using JSON?

You could, but it would mean decoding JSON at the other end instead of letting normal form handling take care of it.

And if so, how could I send a JSON object via ajax?

There is no such thing as a JSON object. JSON takes the form of a string, and you can include strings in query strings (just remember to encodeURIComponent).

First off, yes, do not write ajax by hand. You are unlikely to produce something that truly works on all browsers.

The best approach to your actual problem would be to submit your array as cgi parameters.

If the checkboxes are in a form, you need to do very little - simply submit the form,

 <form><input type=checkbox ...><input type=checkbox ...>
 $.post("test.php", $("#testform").serialize());

See http://api.jquery.com/jQuery.post/ for more details on how to do that. Your list will turn up as an array in PHP.

Or to augment your own example with something very simple, do this:

  url = url + '?checkboxes=' + checkboxes.join(',');

Now just split it inside PHP and you've got it back!