Valider ec2218a3 rédigé par esj's avatar esj
Parcourir les fichiers

Suite de [6962]: l'envoi par POST en AJAX fonctionne, il fallait :

- rajouter l'envoi d'en-tetes HTTP par la methode setRequestHeader;
- consulter $_REQUEST et pas $_POST qui n'est pas rempli dans ce cas !

En conséquence, pour chacun des scripts dans ecrire/actions qu'on voudra passer en AJAX, il faudra opérer ce changement, et à terme renoncer à spip_register_globals qui assurait la compatibilité avec les auto-globales à la php3.

Reste un problème: les envois en Ajax ne respectent pas le charset malgré plusieurs essais avec setRequestHeader, aussi bien en Get qu'en Post. A creuser.
parent 1e82b760
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+9 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -15,12 +15,19 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/filtres');

// Utiliser $_REQUEST car en Ajax on utilise GET et sinon POST.
// et en plus Ajax en POST ne remplit pas $_POST 
// spip_register_globals ne fournira donc pas les globales esperees

function action_documenter_dist() {
	
	global $action, $arg, $hash, $id_auteur, $redirect;

	include_spip('inc/actions');

	$arg = $_REQUEST['arg'];
	$hash = $_REQUEST['hash'];
	$action = $_REQUEST['action'];
	$redirect = $_REQUEST['redirect'];
	$id_auteur = $_REQUEST['id_auteur'];

	if (!verifier_action_auteur("$action-$arg", $hash, $id_auteur)) {
		include_spip('inc/minipres');
		minipres(_T('info_acces_interdit'));
+25 −16
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -152,15 +152,20 @@ function createXmlHttp() {
		return new ActiveXObject("Microsoft.XMLHTTP");
}


function ajah(method, url, flux, rappel)
{
	var xhr = createXmlHttp();

	if (!xhr) return false;
        xhr.onreadystatechange = function () {ajahReady(xhr, rappel);}
        xhr.open(method, url, true);
	// Necessaire au mode POST
	// Il manque la specification du charset
	if (flux) {
		xhr.setRequestHeader("Content-Type",
		       "application/x-www-form-urlencoded; ");
	}
	xhr.send(flux);
	return true;
}

function ajahReady(xhr, f) {
@@ -171,27 +176,31 @@ function ajahReady(xhr, f) {
        }
}

// Si Ajax est disponible, cette fonction envoie le formulaire avec lui.
// Elle renvoie False pour empecher l'envoi du formulaire en mode normal.
// Le cas True ne devrait pas se produire car le cookie spip_accepte_ajax
// a du anticiper la situation.
// Toutefois il y toujours un coup de retard dans la pose d'un cookie:
// eviter de se loger avec redirection vers un telle page

function AjaxSqueeze(form, div)
{
	var i;
	var u = '';
	var noeud = document.getElementById(div); // pere du formulaire
	if (!noeud) return true; // forcer l'envoi en mode non Ajax
	var s = form.getAttribute('action');
	// pere du formulaire (le donner direct serait mieux)
	var noeud = document.getElementById(div);
	if (!noeud) return true;

	for (i=0;i < form.elements.length;i++) {
		n = form.elements[i].name;
		if (n)  u += n+"="+escape(form.elements[i].value) + '&';
	}

	u = form.getAttribute('action') +'?' + u;

	// ce serait plus propre d'envoyer en Post mais FireFox coince
	ajah('GET',
	     u,
	     null,
	return !ajah('POST', // ou 'GET'
		     s ,     // s + '?'+ u,
		     u,      // null,
		     function(r) { noeud.innerHTML = r;} );
 
	return false; // empecher l'envoi en mode non Ajax
}