Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Ajax sur widget XUL

Envoyé par : lfournier

Date : 13/06/2007 15:29

Bonjour,

Je désire faire un requête AJAX pour mettre à jour une liste XUL. Voici un CGI en python qui devrait le faire, mais la liste initiale ('A' 'B' 'C') n'est pas remplacée par la liste ('X','Y','Z'). Pourtant, le DOMinspector me montre bien le listitem de lavel 'X', mais il ne s'affiche pas dans l'appli XUL.

Avez-vous une idée ?

Je n'ai trouvé aucun tutoriel ni exemple qui marche de code XUL+Ajax ensemble, mais seulement des XUL sans Ajax et des Ajax+HTML.

#!/usr/bin/python
import cgi  
class ajax:
    def __init__(self):
        self.fo = cgi.FieldStorage()

        if self.fo.has_key('z'):
            print 'Content-type: text/xml\n'
            print '<?xml version="1.0" encoding="ISO-8859-1"?>'
            self.update()
        else:
            print 'Content-type: application/vnd.mozilla.xul+xml\n'
            print '<?xml version="1.0" encoding="ISO-8859-1"?>'
            self.make_xul()

    def js(self):
        print """<script language="javascript">
<![CDATA[
function AJAX_XML(url, callback) {
  var req = new XMLHttpRequest();
  req.onreadystatechange = processRequest;  
  function processRequest () {
    if (req.readyState == 4) {
      if (req.status == 200) {
	if (callback) callback(req.responseXML);
      } else {
	alert('Error status:'+ req.status);
      }
    }
  }
  this.doGet = function() {
    req.open("GET", url);
    req.send(null);
  }
}

function go(c){
	if(!c.data.replace(/\s/g,''))
		c.parentNode.removeChild(c);
}

function clean(d){
	var bal=d.getElementsByTagName('*'); 
	for(i=0;i<bal.length;i++){
		a=bal[i].previousSibling;
		if(a && a.nodeType==3)
			go(a);
		b=bal[i].nextSibling;
		if(b && b.nodeType==3)
			go(b);
	}
	return d;
} 

function run() {
  var ai = new AJAX_XML("ajax_xul.py?z=" + Math.random(),  function(response) { 
	      var tg = document.getElementById('ml1');
              var root_node = clean(response.documentElement);
              
               newcontent=document.importNode(root_node.cloneNode(true),true);
              tg.replaceChild(newcontent,tg.firstChild);
              alert(newcontent.firstChild.getAttribute("label"));
              });
  ai.doGet();
}
]]>
</script>
"""

    def update(self):
        print '<menupopup>'
        for i in ('X','Y','Z'):
            print '<menuitem label="%s"/>'%(i)
        print '</menupopup>'

    def make_xul(self):
        print '<window onload="run()"  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">'
        self.js()
        print '<menulist id="ml1"><menupopup>'
        for i in ('A','B','C'):
            print '<menuitem label="%s"/>'%(i)
        print '</menupopup></menulist></window>' 

if __name__ == '__main__':
    ajax()

Merci de votre aide

Laurent

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.