Ok ho fatto una prova, questo è quanto:
1) Nel file "file.php" scrivi solo codice php, servirà per fare le chiamate ajax
2) Ho sbagliato a scrivere
Codice:
$(this option:selected)
deve invece essere
Codice:
$("#select option:selected")
3) Se vuoi ricavare la value dell'option usa questo codice:
Codice:
var valore = $("#select option:selected").val();
Se invece vuoi ricavarne il testo scritto tra <option> e </option> usi questo
Codice:
var valore = $("#select option:selected").text();
Detto questo il risultato corretto sarebbe questo:
Index.php
Codice HTML:
<head>
<meta charset="UTF-8">
<title>Documento senza titolo</title>
</head>
<body>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<select name="opzione" id="select">
<option value="1">Opzione 1</option>
<option value="2">Opzione 2</option>
</select>
<script>
$("#select").change(function(){
var valore = $(this option:selected).text(); //valore avrà il valore del "value" dell'opzione
$.ajax({
type: "POST",
url: "file.php", //file dove eseguire codice php (quello creato prima)
data: "opzione="+valore, //opzione è il valore che controllo nel file php
dataType: "html",
success: function(data) {
alert(data);
}
});
})
</script>
</body>
</html>
File.php
Codice PHP:
<?php
if(isset($_POST['opzione'])){ //controllo che sia settata la variabile che mando con ajax
$valoreOpzione = $_POST['opzione']; //assume il valore che mando con ajax (quello dell'option selezionato)
echo $valoreOpzione;//eseguo i comandi per modificare il database
}
Andando dunque a cambiare opzione del select vedrai un alert con il valore dell'option selezionata.
Se nel file.php invece di fare un echo fai modifiche al database, l'alert sarà vuoto perché non hai output, ma il database verrà modificato.
Codice:
success: function(data) {
alert(data);
}
il "data" che vedi qui, corrisponde all'output che emetti nel file file.php, e può essere qualsiasi cosa, verrà processato come html.