Все еще не уверены в своем вопросе при нажатии на клавиатуру только один раз на загрузку страницы. Это очень сложно рассуждать разумно, не видя больше кода. Тем не менее, вот пример, который я просто бросил вместе, как вы можете представить возвращенные данные более полезным способом.
Код требует, чтобы вы загрузили библиотеку AjaxRequest, о которой я упомянул в предыдущем комментарии. (http://ajaxtoolbox.com/request/)
Здесь я демонстрирую несколько принципов.
- Организация данных в PHP класс
- построив массив экземпляров этого класса
- возвращающихся этот массив в JSON
- захватывающего текст JSON и превратить его обратно в объект в JS
- Обработка данных
Я привел 2 очень простой пример: первый просто загружает все имена файлов в текущем каталоге (это hol ds jsonDir.php) в элемент выбора. Выбор имени файла приводит к тому, что он копируется в текстовый ввод рядом с кнопкой.
Во-вторых, только извлекает имена файлов png. Он заманивает их всех в элемент выбора. На этот раз, однако, когда элемент выбран, он используется как src для изображения. В каждом случае имена файлов захватываются только тогда, когда/при нажатии соответствующей кнопки. Там немного избыточного/иначе дерьмового кода, который я мог бы сделать лучше, но после 20 часов бодрствования я готов к постели!
Надеется, что это полезно для вас. Любые вопросы, просто спросите. :)
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>
Когда вы говорите, что он срабатывает только один раз. Что именно вы имеете в виду - он срабатывает только один раз, когда выдается ключ, или он срабатывает только один раз для страницы или, возможно, что-то еще? – enhzflep
Восстанавливается один раз при каждой загрузке браузера. Итак, я набираю «a» и загружает все с «a» в нем, а затем, когда я набираю «b», он не запускается снова. Я должен перезагрузить браузер для его сброса, чтобы он мог снова запустить. –
Хм, это больше, чем немного странно. Обычно я использую библиотеку AjaxRequest (http://ajaxtoolbox.com/request/), так как она обрабатывает несколько параллельных запросов без особых усилий и намного легче, чем jQuery, с которыми я не заинтересован - я думал, что материал ajax может иметь падали, но также объединили функциональный пример из вашего кода. Php немного фанк - я предполагаю, что это не копия, а скорее проблема типа look'n'retype. Я бы поставил результаты в массив, а затем вернул его как JSON. Затем вы можете загружать и использовать элементы в массиве любым способом. – enhzflep