collegare ajax con php

step_over

Nuovo Utente
26 Nov 2012
21
0
0
salve ragazzi, dopo aver seguito un tutorial ho capito come poter utilizzare php tramite ajax, ma quello che mi rimane ancora sconosciuto è come poter avere i risultati senza dover ricaricare la pagina perchè per ora ho trovato solo esempi che mi salvavano i risultati in un file di testo. è possibile avere i risultati senza usare file di testo? tipo come succede per le funzioni che volendo ti restituiscono i risultati come variabili
 
Per recuperare il contenuto di uno script PHP senza ricaricare la pagina bisogna fare esattamente come faresti con un file di testo:
HTML:
<!DOCTYPE html>
<html lang="it">
	<head>
		<title>AJAX</title>
		<meta charset="utf-8" />
	</head>

	<body>
		<div id="response"></div>

		<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
		<script type="text/javascript">
		$(function() {
			$.getJSON("ajax.php", function(data) {
				$("#response").html(data.response);
			});
		});
		</script>
	</body>
</html>
E nel file ajax.php:
PHP:
<?php
$data = array(
	'response' => 'Contenuto...',
);

echo json_encode($data);
 
mi sa che mi sono spiegata male... io in realtà ho una pagina php dove dentro a una funzione javascript devo fare una select sul database per fare un controllo... di conseguenza a me il risultato mi servirebbe nella pagina principale in php senza doverla ricaricare... come posso fare? O.o
 
certo...

il form da dove prendo i parametri
HTML:
NUMERO FATTURA
<input type="text" name="numfatt" size="4" value="" onChange="controlla();"> <br>
DATA FATTURA
<input type="text" name="datafatt" size="10" onchange="data();">

la funzione controlla

HTML:
<script language="javascript">

function controlla (){
var numero = document.form1.numfatt.value;
var data = document.form1.datafatt.value;
	//controllo se tutte e due i campi sono pieni
	if (numero != null && data != null) {
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat); // is the format ok?
	var anno = matchArray[5];

	//qua devo inserire la select php che controlla sul database se la fattura esiste o meno

		if (con == 1) {
		window.alert("la fattura esiste gia");
		}else 
		{window.alert ("la fattura none esiste"); 
		}
	}
}
</script>

questa sarebbe la select che mi interesserebbe inserire nella funzione javascript
PHP:
$sqlstr="SELECT  * FROM testata WHERE AnnoFattura= $data && NumeroFattura = &num ";
	$risultato=mysql_query($sqlstr);
		if ($risultato){
		return 1;
		}else {
		return 0; }
 
Puoi fare in questo modo.

Pagina del form:
HTML:
<!DOCTYPE html>
<html lang="it">
  <head>
    <title>Controllo AJAX</title>
    <meta charset="utf-8" />
  </head>

  <body>
    <form method="post" action="#" id="form">
      <div>
        <label for="annoFattura">Anno fattura:</label>
        <input type="text" name="annoFattura" id="annoFattura" />
      </div>

      <div>
        <label for="numeroFattura">Numero fattura:</label>
        <input type="text" name="numeroFattura" id="numeroFattura" />
      </div>

      <div>
        <button type="submit">Invia</button>
      </div>
    </form>

    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script type="text/javascript">
    $(function() {
      $("#form").submit(function() {
        $.getJSON("check.php", {
          'annoFattura':   $("#annoFattura").val(),
          'numeroFattura': $("#numeroFattura").val()
        }, function(data) {
          if (data.result) {
            alert("La fattura esiste.");
          } else {
            alert("La fattura non esiste.");
          }
        });
      });
    });
    </script>
  </body>
</html>
Pagina check.php:
PHP:
<?php
$annoFattura   = isset($_POST['annoFattura'])   ? trim($_POST['annoFattura'])   : '';
$numeroFattura = isset($_POST['numeroFattura']) ? trim($_POST['numeroFattura']) : '';

$sql = 'SELECT * FROM testata WHERE AnnoFattura = %d AND NumeroFattura = %d';
$sql = sprintf($sql, $annoFattura, $numeroFattura);

$query = mysql_query($sql) or die(mysql_error());

return json_encode(array(
  'result' => (mysql_num_rows($query) > 0),
));
 
grazie mille.. ma non e possibile parlo passando da una funzione javascript? o cmq senza il pulsante?
 
l'evento è quando l'utente inserisce il numero di fattura o la data.. per la data c'e gia una funzione che controlla se la data inserita è valida e alla fine di quella se è tutto a posto sarà gia la funzione a richiamare. vi posto la funzione che controlla la data

HTML:
<script language="javascript">
function data(dateStr) {

if (dateStr.length != 10) {
alert("Si prega di inserire la data sia come mm / gg / aaaa o gg-mm-aaaa.");

return false;
}
var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var matchArray = dateStr.match(datePat); // is the format ok?

if (matchArray == null) {
alert("Si prega di inserire la data sia come mm / gg / aaaa o gg-mm-aaaa.");

return false;
}

day = matchArray[1]; // p@rse date into variables
month = matchArray[3];
year = matchArray[5];

if (month < 1 || month > 12) { // check month range
alert("Il mese deve essere compreso tra 1 e 12.");
return false;
}

if (day < 1 || day > 31) {
alert("Giorno deve essere compreso tra 1 e 31.");
return false;
}

if ((month==4 || month==6 || month==9 || month==11) && day==31) {
alert("il mese "+month+" non ha 31 giorni!")
return false;
}

if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day > 29 || (day==29 && !isleap)) {
alert("il mese febbraio " + year + " non ha " + day + " giorni!");
return false;
}
}
return true;
controlla (); // se l data è valida richiama la funzione
}

</script>
 
La tua funzione viene eseguita quando il valore del campo cambia. In questo caso una soluzione simile non è fattibile perché, per ogni valore eseguito, verrebbe effettuata una richiesta HTTP che rallenterebbe l'esecuzione. Io suggerisco di eseguire il controllo all'invio del form ed eventualmente quando l'elemento #numeroFattura perde il focus.
 
Io suggerisco di eseguire il controllo all'invio del form ed eventualmente quando l'elemento #numeroFattura perde il focus.
Cioè dovresti utilizzare onblur per quell'elemento e magari un controllo totale sempre con ajax quando viene inviato il submit oltre al controllo lato server (PHP).
 

Discussioni simili