jQuery: il formato testo semplice è una valida alternativa in AJAX?

jQuery: il formato testo semplice è una valida alternativa in AJAX?

JSON, HTML e XML sono i formati di dati più usati quando si implementa AJAX con jQuery. L'unico problema con questi formati è che richiedono una certa elaborazione da parte di jQuery. Possiamo usare il testo semplice (text/plain) come alternativa?

Richieste semplici

Quando dobbiamo gestire richieste semplici che prevedono solo la visualizzazione di un messaggio di risposta, allora questo formato è perfetto. Si tenga presente che jQuery è anche in grado di gestire le stringhe come HTML, quindi si può usare questo formato anche per generare strutture DOM.

Tipicamente un linguaggio lato server elabora questo formato come segue:


header('Content-Type: text/plain');
// elabora la richiesta

echo 'Message';
exit();

La richiesta AJAX in jQuery è semplice:


$.ajax({
	url: 'ajax.php',
	type: 'POST',
	dataType: 'text',
	data: {
		foo: 'Test'
	},
	success: function(text) {
		$('#output').text(text);
	
	}
});

Possiamo anche restituire una stringa HTML:


header('Content-Type: text/plain');
// elabora la richiesta

echo '<p>Message</p>';
exit();

che jQuery gestirà come stringa HTML:


$.ajax({
	url: 'ajax.php',
	type: 'POST',
	dataType: 'text',
	data: {
		foo: 'Test'
	},
	success: function(text) {
		$('#output').html(text); 
	
	}
});

Richieste complesse

Ora immaginiamo di dover gestire una richiesta complessa come l'invio e la validazione di un form. Lo script lato server dovrà creare una stringa di risposta abbastanza complessa:


header('Content-Type: text/plain');
$errors = array();
$output = '';
// valida il form

if(count($errors) > 0) {
	foreach($errors as $error => $type) {
		$output .= 'error-' . $error . ':' . $type . ',';
	
	}

} else {
	$output = 'Success';

}
echo $output;
exit();

Se ci sono errori di validazione, la stringa apparirà simile alla seguente:

error-email:Not a valid e-mail address,error-username:Invalid username,

jQuery quindi deve elaborare e manipolare la stringa di risposta:


$.ajax({
	url: 'ajax.php',
	type: 'POST',
	dataType: 'text',
	data: $('form').serialize(),
	success: function(text) {
	    var html = '';
		
		if(text.indexOf('error') != -1) {

			var responseStr = text.replace(/,$/, '');
			var responseParts = response.split(',');
			
			for(var i = 0; i < responseParts.length; i++) {
				var responsePart = responseParts[i];
				var messages = responsePart.split(':');
				var errorClasses = messages[0].split('-');
				html += '<div class="' + errorClasses[0] + ' ' + errorClasses[1] + '">' + messages[1] + '</div>';
			
			}
		
		} else {
			html = '<p class="success">' + text + '</p>';
		
		}
		
		$('#output').html(html);
	}
});

Conclusioni

Come si può notare, il formato testo semplice è utile solo per gestire richieste semplici. Quando dobbiamo invece gestire richieste complesse, questo formato richiede un lungo processo di elaborazione e manipolazione delle stringhe da parte di jQuery.

Torna su