Toujours pas sûr de votre question avec le keyup tirant seulement une fois par chargement de page. C'est très difficile de spéculer raisonnablement sans voir plus de code. Néanmoins, voici un exemple que je viens de jeter sur la façon dont vous pouvez présenter les données renvoyées d'une manière plus utile.
Le code nécessite que vous téléchargiez la bibliothèque AjaxRequest que j'ai mentionnée dans un commentaire précédent. (http://ajaxtoolbox.com/request/)
Ici, je démo quelques principes.
- Organiser les données dans une classe php
- construire un tableau d'instances de cette classe
- retour ce tableau comme JSON
- attraper le texte JSON et de le remettre dans un objet JS
- Traitement des données
J'ai donné 2 exemples très simples - le premier charge simplement tous les noms de fichiers dans le répertoire courant ds jsonDir.php) dans un élément select. Le choix d'un nom de fichier entraîne sa copie dans une entrée de texte à côté du bouton.
La seconde, récupère uniquement les noms de fichiers png. Il les met tous dans un élément de sélection aussi. Cette fois cependant, lorsqu'un élément est sélectionné, il est utilisé comme src pour une image. Dans chaque cas, les noms de fichiers ne sont saisis que si/quand le bouton correspondant est enfoncé. Il y a un peu de code redondant/sinon merdique que j'aurais pu faire mieux, mais après 20 heures de réveil, je suis prêt à aller me coucher!
il est utile Espoir pour vous. Des questions, il suffit de demander. :)
1. jsonDir.php
<?php
class mFile
{
public $name, $time, $size;
}
if (!isset($_GET['wildcard']))
$wildCard = "*.*";
else
$wildCard = $_GET['wildcard'];
foreach (glob($wildCard) as $curFilename)
{
$curFileObj = new mFile;
$curFileObj->name = $curFilename;
$curFileObj->time = date("d/m/Y - H:i", filectime($curFilename));
$curFileObj->size = filesize($curFilename);
$fileArray[] = $curFileObj;
}
printf("%s", json_encode($fileArray));
?>
2. readDir.html
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='script/ajaxRequestCompressed.js'></script>
<script>
function byId(e){return document.getElementById(e);}
function newEl(tag){return document.createElement(tag);}
function myGetAjaxResponseWithCallback(url, target, callbackFunc)
{
AjaxRequest.get(
{
'url':url,
'onSuccess':function(req){ callbackFunc(req.responseText, target); }
}
);
}
function getResults1()
{
var url = "jsonDir.php";
var target = byId('resultsDiv');
myGetAjaxResponseWithCallback(url, target, jsonDataReceived1);
}
function getResults2()
{
var url = "jsonDir.php?wildcard=*.png";
var target = byId('resultsDiv2');
myGetAjaxResponseWithCallback(url, target, jsonDataReceived2);
}
function jsonDataReceived1(responseText, targetContainer)
{
var resultObject = JSON.parse(responseText);
targetContainer.innerHTML = "";
var mStr = "There were " + resultObject.length + " records returned" + "<br>";
var mSel = newEl("select");
mSel.addEventListener('change', doAutofill, false);
var i, n = resultObject.length;
for (i=0; i<n; i++)
{
var curRecordOption = new Option(resultObject[i].name, i);
mSel.appendChild(curRecordOption);
}
targetContainer.innerHTML = mStr;
targetContainer.appendChild(mSel);
}
function jsonDataReceived2(responseText, targetContainer)
{
var resultObject = JSON.parse(responseText);
targetContainer.innerHTML = "";
var mSel = newEl("select");
mSel.addEventListener('change', showSelectedImg, false);
var i, n = resultObject.length;
for (i=0; i<n; i++)
{
var curRecordOption = new Option(resultObject[i].name, i);
mSel.appendChild(curRecordOption);
}
targetContainer.innerHTML = '';
targetContainer.appendChild(mSel);
}
function doAutofill(e)
{
var curSelIndex = this.value;
var curText = this.options[curSelIndex].label;
byId('autofillMe').value = curText;
}
function showSelectedImg(e)
{
byId('previewImg').src = this.options[this.value].label;
}
</script>
<style>
img
{
border: solid 2px #333;
}
</style>
</head>
<body>
<button onclick='getResults1()'>Get *.* dir listing</button> <input id='autofillMe'/>
<div id='resultsDiv'></div>
<hr>
<button onclick='getResults2()'>Get *.png dir listing</button> <img id='previewImg' width='100' height='100'/>
<div id='resultsDiv2'></div>
</body>
</html>
Lorsque vous dites qu'il ne s'allume qu'une fois. Qu'est-ce que vous voulez dire exactement - il ne se déclenche qu'une fois chaque fois qu'une touche est relâchée, ou ne se déclenche qu'une fois pour la page, ou peut-être autre chose? – enhzflep
Se déclenche une fois sur chaque chargement du navigateur. Donc, je tape "a" et il charge tout avec "a", et quand je tape "b", il ne se déclenche plus. Je dois recharger le navigateur pour qu'il se réinitialise afin qu'il puisse tirer à nouveau. –
Hmm, c'est plus qu'un peu bizarre. J'utilise généralement la bibliothèque AjaxRequest (http://ajaxtoolbox.com/request/) car elle gère plusieurs requêtes parallèles sans effort et est beaucoup, beaucoup plus légère que jQuery, ce qui ne m'intéresse pas - je pensais que les ajax pouvaient avoir été tombé sur, mais ont également bricolé ensemble un exemple fonctionnel de votre code. Le php est un peu génial - je suppose que ce n'est pas un copier-coller, mais plutôt un problème de look'n'retype. Je mettrais les résultats dans un tableau et ensuite le renvoyer comme JSON. Vous pouvez ensuite charger et utiliser les éléments du tableau de la manière qui vous convient. – enhzflep