Page 3 sur 4

MessagePublié: 03 Nov 2009 à 12:17
par stloje
A faire attention : l'URL que j'ai fourni dans l'exemple contient le chemin pour chercher l'information et non pour soumettre l'information. Donc, si tu veux récupérer un masque via Ajax, tu fournis la commande Notes qui ouvre ce masque et Ajax s'occupe d'aller le chercher.

MessagePublié: 03 Nov 2009 à 12:19
par amahi
En fait j ai lu et relu le fil en entier et je comprend pas vraiment ce que tu appelle "faire un evaluate". Si c'est court-circuité le submit pour faire une evaluation dans le JS ou si ton JS doit communiquer avec le serveur, et dans ce cas la pourquoi vouloir forcement que ce soit un form. Enfin bref j ai rien compris ^^

MessagePublié: 03 Nov 2009 à 12:32
par Michael DELIQUE
re,

bon pour amahi je me re-explique :)

à la base ya se post => http://dominoweb.blogspot.com/2006/07/a ... -sans.html

le but pouvoir faire un evaluate de @formules en JavaScript.

pas de souci avec de l'ajax et un agent hors le liens ci dessus explique qu'on peut remplacer l'agent par un form (plus rapide, moins gourmant)

pas de souci non plus ça marche

le souci c'est que la @formule à évalué est passé dans l'url (en get) et j'aimerais éviter de surcharger l'url et donc passé l'info en post.

probleme un form ne sais pas récupéré les données envoyé en post par de l'ajax car il ne connais pas la variable cgi content_request (alors qu'un agent la connais)

a premiere vue Prototype à trouvé une solution pour contourner le pb, mais je n'ai pas compris comment ! voila.

j'espere avoir été plus claire

bon c'est pas un truc urgent plus un bazar que je fais en tache de font quand j'ai 5mn

maintenant pourquoi j'utilise pas prototype tout simplement pour 2 raisons :

- j'ai envi de cromprendre comment ça marche
- j'ai pas envi d'implémenter prototype pour 5 ligne de code

MessagePublié: 03 Nov 2009 à 13:59
par stloje
P'tit soucis, le lien n'est plus actif.

Pour récapituler, tu veux exécuter une formule Notes en passant par de l'Ajax (via un agent Notes), mais tu ne sais pas comment récupérer l'info? C'est cela?

MessagePublié: 03 Nov 2009 à 14:08
par Michael DELIQUE
sainte merde ! le blog n'existe plus ! j'espere que je l'ai aspiré...

bon enfin oui et non

oui je veux executé une formule en JS via de l'ajax et non je veux pas faire l'évaluate via un agent mais via un form.

et non je n'ai aucun souci avec l'agent pour récupérer les infos.

mon souci c'est pour que le form appelé en ajax puisse traiter un appel ajax en post

voila le JS que j'utilise et qui marche tres bien

[syntax="javascript"]
/* format la chaine en retirant les caracteres indésirable*/
function stringFormat(source){
if (source.length === 0) {
return "";
}
return source.replace(/^\s/, '').replace(/\s$/, '');
}
function Formula_ajax(server, pathfile, sFormule){

if (server === undefined || server === null || server === "" || stringFormat(server) === "") {
server = "";
}
else {
server = "http://" + stringFormat(server);
}
if (pathfile === undefined || pathfile === null || pathfile === "" || stringFormat(pathfile) === "") {
/*si la valeur est vide récupere le chemin de la base en cours*/
pathfile = (document.location.href).toLowerCase();
pathfile = pathfile.substring(pathfile.indexOf('/', pathfile.indexOf('://') + 3) + 1, pathfile.lastIndexOf('nsf') + 3);
}
pathfile = stringFormat(pathfile);
if (pathfile === "") {
alert("Ajax Formula Error 1 : pathFile is empty");
return null;
}

if (sFormule === undefined || sFormule === null || sFormule === "") {
return "";
}

var XHRequest = null;

if (window.XMLHttpRequest) {
/* Firefox et autres */
XHRequest = new XMLHttpRequest();
if (XHRequest.overrideMimeType) {
XHRequest.overrideMimeType('text/xml');
}
}
else
if (window.ActiveXObject) {
/* Internet Explorer*/
try {
XHRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
XHRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else {
/*non supporté par le navigateur*/
alert("Ajax Formula Error 2 : XMLHttpRequest non supporté par le navigateur");
return null;
}

var urlRequeste = server + "/" + pathfile + "/FRMFORMULA?createdocument&F=" + escape(sFormule.replace(/%/g, '%25').replace(/\+/g, '%2B')).replace(/%25/g, '%');

XHRequest.open("GET", urlRequeste, false);
XHRequest.send(null);

if (XHRequest.status == 200) {
return XHRequest.responseText.replace(/<S><]*>/g, "").replace(/[\n\b]/g, "");
}
else {
alert("Ajax Formula Error 3 : " + XHRequest.statusText + "\n " + XHRequest.status + "\nURL = " + urlRequeste);
return null;
}
}[/syntax]

l'appel ce fait en get et je veux le passer en post pour éviter de surcharger l'url

MessagePublié: 03 Nov 2009 à 14:36
par stloje
Je comprend mieux! Bon, tu veux afficher le document que tu viens de créer via Ajax? Tu as pensé à utiliser le WebQueryOpen pour récupérer le champ CGI? J'essaie de te traduire ton code en Prototype et je te le retourne!

MessagePublié: 03 Nov 2009 à 14:38
par Michael DELIQUE
re

le lien fonctionelle => http://dominoweb.blogspot.com/2006/07/a ... -sans.html

non je veux pas afficher le document appeller en ajax, le document ne me sert qu'a évaluer la formule donc je veux récupere le resultat (comme pour un agent)

MessagePublié: 03 Nov 2009 à 15:04
par stloje
Ok, c'est le $$Return qui retourne la valeur, mais ça résout pas le problème de la méthode POST. Tu n'auras pas le choix d'utiliser l'événement "WebQueryOpen" pour récupérer les paramètres passés à partir du champ "Request_Content".

Je ne te garantis rien, mais voici ce que ça devrait donner avec Prototype :
Code : Tout sélectionner
function stringFormat(source){
    if (source.length === 0) {
        return "";
    }
    return source.replace(/^\s/, '').replace(/\s$/, '');
}
function Formula_ajax(server, pathfile, sFormule){

    if (server === undefined || server === null || server === "" || stringFormat(server) === "") {
        server = "";
    }
    else {
        server = "http://" + stringFormat(server);
    }
    if (pathfile === undefined || pathfile === null || pathfile === "" || stringFormat(pathfile) === "") {
        /*si la valeur est vide récupere le chemin de la base en cours*/
        pathfile = (document.location.href).toLowerCase();
        pathfile = pathfile.substring(pathfile.indexOf('/', pathfile.indexOf('://') + 3) + 1, pathfile.lastIndexOf('nsf') + 3);
    }
    pathfile = stringFormat(pathfile);
    if (pathfile === "") {
        alert("Ajax Formula Error 1 : pathFile is empty");
        return null;
    }
   
    if (sFormule === undefined || sFormule === null || sFormule === "") {
        return "";
    }
 
    var urlRequest = server + "/" + pathfile + "/FRMFORMULA?createdocument";
    new Ajax.Request (urlRequest,{
      method : "post",
      postBody : F=" + escape(sFormule.replace(/%/g, '%25').replace(/\+/g, '%2B')).replace(/%25/g|>, '%'),
      onSuccess : function (transport) {
        return transport.responseText.replace(/<S></g>, "").replace(/[\n\b]/g|>, "");
      },
      onFailure : function (transport) {
        alert("Ajax Formula Error 3 : " + transport.statusText + "\n " + transport.status + "\nURL = " + urlRequest);
      }
    });
}

MessagePublié: 03 Nov 2009 à 15:09
par philippe
Désolé, je n'ai pas eut le courage de lire entièrement tout le fil. JE risque donc d'être hors contexte.

As tu essayé la commande URL ?savedocument
C'est assez tiré par les cheveux mais celà permet d'envoyer en POST le contenu d'un formulaire et de l'enregistrer directement comme document. Je l'utilise pour simuler l'autosave en AJAX.

MessagePublié: 03 Nov 2009 à 15:19
par Michael DELIQUE
j'essairais ! merci de l'idée

mais bon le form est bloqué pour le save (histoire de pas généré des doc pour rien) donc je sais pas si ça va marché.

MessagePublié: 04 Nov 2009 à 21:47
par roubech
j'ai pas relu tout non plus, mais si tu remplaces juste GET par POST et avec un champ F dans ton masque pour récupérer automatiquement le contenu de l'argument de l'url ?
XHRequest.open("POST", urlRequeste, false);

MessagePublié: 04 Nov 2009 à 21:51
par Michael DELIQUE
re le pb c'est pas l'envois en post

c'est qu'un form ne récupere pas les donnée envoyé en post seulement celle envoyé par l'url

MessagePublié: 04 Nov 2009 à 22:09
par roubech
ah ok
tu as essayé ?OpenForm ou ?OpenForm&Seq=1 (pour essayer de simuler un refresh d'un form deja ouvert)

MessagePublié: 01 Fév 2010 à 17:33
par stloje
Allez, hop! Un retour rapide sur Ajax!

Voici ce que j'ai trouvé concernant une demande Post en Ajax natif sans utiliser de Framework.

Il faut modifier l'entête du MIME pour envoyer une requête en Post, et forcer le "Data" lors de l'envoie de la requête.

Voici ce que j'ai trouvé

Code : Tout sélectionner
http_request.open('POST', url, true);
      //changer le type MIME de la requête pour envoyer des données avec la méthode POST!!!!
      //cette ligne doit etre absolument apres http_request.open('POST'....
      http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      obj=document.getElementById(id_date_a_charger);
      obj2=document.getElementById(id_onglet_crt);
      data="date_fich="+obj.value+"&id_client="+id_client+"&num_onglet="+obj2.value;
      //alert("Data envoyees: "+data);
        http_request.send(data);


Il y a aussi ce site qui en parle :
http://www.captain.at/ajax-file-upload.php

MessagePublié: 01 Fév 2010 à 17:43
par stloje
Il y a un autre site que j'ai trouvé intéressant :

http://deptinfo.cnam.fr/~pons/NFA021/AJAX/ajax.pdf