11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour
Soit 2 pages simples, test.php et test2.php
Le but : un click sur une ligne de la page test.php, appelle une une fonction ajax et doit compléter la liste <ul avec les données issues de page test2.php.

je ne parvient pas à caser cela comme il faut: insérer les <li> juste après celle qui a servit pour le click.

Un simple copier coller des 2 pages vous donnera les éléments

Merci de votre aide

page test.php


<!DOCTYPE html> 
<html>
<head>
	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	<title>Test</title>	
	<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.css" />
	<script src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
	<script type="text/javascript">
$(function()
{
	$("li").live('click', function()
	{		
		var ligne=$(this).attr('id');
		$.ajax({
           		type:"POST",
           		dataType:"html",
                	url: "test2.php",
                	data: "id="+ligne,
                	success: function(msg) 
                		{       	
                        	$(this).after(msg);
                        	$("#listeMajForm").listview("refresh");
                        	}
           });
	});		
}); 
</script>
<script src="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js"></script>
</head>
<body> 
<div data-role="page" id="maj">
	<div data-role="header" data-theme="b">
		<h3>MaJ</h3>
	</div > <!-- end HEADER -->
	
	<div data-role="content">
	<ul data-role="listview" id="listeMajForm">
			<li data-role="list-divider" data-theme="b">Au choix ...</li>
			<li id="1"><a href="#">En Francais</a></li>
			<li id="2"><a href="#" >En US</a></li>
	</ul>
	</div> <!-- end content -->
</div> <!-- END MAJ -->
</body>
</html>



la page test2.php


<?php
$tab1=array("Un", "Deux", "Trois");
$tab2=array("One", "Two", "Three");

$choix=$_POST['id'];
$tab="tab".$choix;
foreach($$tab AS $k=>$v)
     {
	echo "<li><a href='#'>".$v."</a></li>";
    }
?>

Alors que Firebug me dit qu'ajax retourne bien les données ... Comment faire pour les afficher correctement ?

Modifié par french-petzouille (11 Jul 2011 - 21:18)
Modérateur
Salut,

Je vois une solution :

* test 2 : faire qu'une seule et grande string
* test 2 : chaque sous-string sera séparé par un caractère. exemple -> "| ou ; ou ~ etc." (pas de caractère courant)
* test 1 : récupérer la grande string
* test1 : spliter (split -> en JS | explode-> en php) la grande string (ce qui donne le string dans l'array) Smiley lol
* test1 : dispatcher ton tableau
Modifié par niuxe (08 Jul 2011 - 09:07)
merci nuixe
si tu testes mon code la page test2.php renvoie ce qu'il faut ... c'est pas là qu'il faut travailler
Comment modifier la partie ... success: function() de la page test.php pour que cela soit bien afficher = ma question
Hello,

Je crois que le $(this) est relatif à $.ajax(), pas à l'objet qui a appelé le click().

Donc :

$("li").live('click', function() 
    {
        var cible = $(this);
        var ligne= cible.index(); 
        /* je dégage ton histoire d'id, avec index() c'est plus pratique. index() part de 0,
        il ne prendra pas ton premier <li> */

        $.ajax({ 
                   type:"POST", 
                   dataType:"html", 
                    url: "test2.php", 
                    data: "id="+ligne, 
                    success: function(msg) {            
                            cible.after(msg); 
                            $("#listeMajForm").listview("refresh"); 
                    } 
           }); 
    }); 
merci ZeB_panam
Ton idée est sympa.
Cela marche sur les navigateurs safari FF et autres mais ne semble pas être Ok directo sur mon iphone !! Bigre
Serait-ce trop te demander de copier coller les 2 pages de codes dans ton editeur web et de deposer cela sur ton site et me dire si iphone ou autre smartphone est capable d'afficher correctement les données ?
merci
Ça marche pas non plus chez moi sur mon iPhone 3Gs et ; c'est un comble ; la faute en revient à jquery mobile (qui est en bêta, donc bon…). J'ai essayé sans et ça marche nickel.

Ah par contre, j'ai viré mon système d'index()… Vu qu'on insère des <li>, ça fausse tout Smiley lol

Du coup ça donne plus ça :

$(function() { 
    $("li").delegate("a","click",function(e){
        var cible = $(this).closest('li'); 
        var ligne= cible.attr('id');  
 		alert(ligne);
        $.ajax({  
                   type:"POST",  
                   dataType:"html",  
                    url: "test2.php",  
                    data: "id="+ligne,  
                    success: function(msg) {             
                            cible.after(msg);  
                            $("#listeMajForm").listview("refresh");  
                    }  
           });
		e.preventDefault(); 
    });         
});

(j'ai rajouté un preventDefault() et mis en place un delegate() en place du live(). Et l'action est appelé depuis le <a>)
Merci
Le fait que le ß1 fasse que sur iPhone cela déconne me semble étrange ++
Cela laisse supposer que tous les projets en cours avec les ß1 ne marchent pas !
humm

"J'ai essayé sans et ça marche nickel." ... cela veut dire quoi pour toi ?
Cela veut dire que sans l'appel au js de jquery mobile, les actions ajax fonctionnent sans problème Smiley smile

Mais il manque pas une balise meta viewport dans ta page ?
Je suis pas assez calé pour savoir s'il manque une telle balise.
laquelle serait manquante ?


j'vais y mettre celle là :
<meta name="apple-mobile-web-app-capable" content="yes" />
Raphael a fait une introduction au css pour mobile ici si ça peut t'aider :
http://www.alsacreations.com/astuce/lire/1177-une-feuille-de-styles-de-base-pour-le-web-mobile.html

Sinon tu as aussi ça : http://blog.jaysalvat.com/article/optimiser-son-application-web-pour-iphone-ou-ipod-touch

jQuery mobile utilises ça :

<meta name="viewport" content="width=device-width, initial-scale=1">


Et il y a aussi jQTouch qui est un très bon plug-in multi-plateformes pour web mobile :
http://jqtouch.com/
Merci ZeB_panam
J'ai rajouté cette balise ... le résultat est quasi identique
ce qui est OK sur mon navigateur de bureau = pas ok sur mon Iphone et celui de les amis à qui j'ai demandé de voir si j'étais le seul à cagouiller.

j'vais voir jqTouch ... et surtout s'il est aussi mulitplateforme que jqmobile.
Leur site est très discret là dessus d'ailleurs ...j'ai rien trouvé en qq minutes de fouilles
Ben en gros sur la page d'accueil y'a écrit : "A jQuery plugin for mobile web development on the iPhone, Android, iPod Touch, and other forward-thinking devices."

Après, j'ai juste testé leur démo sur mon iPhone, ça marche impec'. Mais le studio (Sencha labs) qui s'occupe de ce plug-in semble passé sous ext.js (un autre framework javascript, plus difficile d'accès que jQuery) et ils ont développé Sencha Touch (qui tourne sûrement sous ext.js), donc pas sûr que le développement de jQTouch soit très suivi…

Tu trouveras plus d'infos sur leur wiki : http://github.com/senchalabs/jQTouch/wiki/
Et sur leur repo GIT sur github : http://github.com/senchalabs/jQTouch
Modifié par ZeB_panam (10 Jul 2011 - 12:20)
sans rien changer à mon jquery ( partie $.ajax ) ... mon truc marche si je prend la latest version via :


	<link href="http://code.jquery.com/mobile/latest/jquery.mobile.min.css" rel="stylesheet" type="text/css" />
	<script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
	<script src="http://code.jquery.com/mobile/latest/jquery.mobile.min.js"></script>


il y a donc bien une pelle dans la ß1.
le hic c'et que la lastest va elle aussi subir des changements dans mon dos et ce qui colle aujourd'hui cagouillera peut-être demain Smiley ohwell
En ce cas, télécharges la latest, et ne passes pas par code.jquery.com

Mais y'a un truc bizarre, il ne me charge pas la même version de http://jquerymobile.com/ sur l'iPhone que sur Firefox (avec le user agent en iOS 4.3). Sur l'iPhone c'est une version Alpha 4, sur FF une version bêta…

Il faudrait que j'installe Xcode (et passer par la virtualisation iPhone + mode développeur) pour regarder ça d'un peu plus près.


[EDIT] Bon en fait j'avais cliqué sur un ancien lien de démo encore indexé par Google… C'est bien la même version sur iPhone et FF.
Modifié par ZeB_panam (11 Jul 2011 - 15:08)