Un esempio funzionante vale più di mille parole…
index.html:
codice:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Sending forms with FormData – MDN</title>
<script type="text/javascript">
"use strict";
function ajaxSuccess () {
alert(this.responseText);
}
function AJAXSubmit (oFormElement) {
if (!oFormElement.action) { return; }
var
oField, sFieldType, nFile, oReq = new XMLHttpRequest(), sSearch = "",
sMethod = oFormElement.method.toUpperCase(), bIsPost = sMethod === "POST";
oReq.onload = ajaxSuccess;
for (var nItem = 0; nItem < oFormElement.elements.length; nItem++) {
oField = oFormElement.elements[nItem];
if (!oField.hasAttribute("name")) { continue; }
sFieldType = oField.nodeName.toUpperCase() === "INPUT" ? oField.getAttribute("type").toUpperCase() : "TEXT";
if (sFieldType === "FILE") {
for (nFile = 0; nFile < oField.files.length; sSearch += "&" + escape(oField.name) + "=" + escape(oField.files[nFile++].name));
} else if ((sFieldType !== "RADIO" && sFieldType !== "CHECKBOX") || oField.checked) {
sSearch += "&" + escape(oField.name) + "=" + escape(oField.value);
}
}
oReq.open(sMethod, bIsPost ? oFormElement.action : oFormElement.action.replace(/(?:\?.*)?$/, sSearch.replace(/^&/, "?")), true);
bIsPost && oReq.setRequestHeader("Content-Type", "application\/x-www-form-urlencoded");
oReq.send(bIsPost ? sSearch.replace(/^&/, "") : null);
}
</script>
</head>
<body>
<h1>Sending forms with FormData</h1>
<form action="register.php" method="post" onsubmit="AJAXSubmit(this); return false;">
<fieldset>
<legend>Registration example</legend>
First name: <input type="text" name="firstname" />
Last name: <input type="text" name="lastname" />
</p>
<input type="submit" value="Submit" />
</p>
</fieldset>
</form>
</body>
</html>
register.php:
Codice PHP:
<?php
/* register.php */
header("Content-type: text/plain");
echo ":: data received via GET ::\n\n";
print_r($_GET);
echo "\n\n:: Data received via POST ::\n\n";
print_r($_POST);
echo "\n\n:: Data received as \"raw\" (text/plain encoding) ::\n\n";
if (isset($HTTP_RAW_POST_DATA)) { echo $HTTP_RAW_POST_DATA; }
echo "\n\n:: Files received ::\n\n";
print_r($_FILES);
?>
Se devi uploadare file le cose si complicano enormemente e ti rimando a questa guida