Итак, давайте посмотрим, правильно ли я вас понял:
У вас есть 2 файла: простой текстовый HTML, где у вас есть вышеупомянутая форма, и файл search.php, который получает петиции AJAX, верно? И вы хотите, чтобы файл не отправлял данные, а вместо этого отправлял AJAX и создавал результаты в div searchContainer, верно?
Тогда у вас есть 2 варианта:
- Создайте результаты из петиции XML / Обычный текст
- Используйте
innerHTML
, если поддерживается вашим браузером.
Исходя из ответа, предыдущие ответы верны, вам нужно return false;
, чтобы избежать отправки формы на сервер. Теперь, возвращаясь к ответу, вы также можете изменить тип с submit
на button
, чтобы вместо него использовать только кнопку.
Теперь параметры:
- Первый вариант должен быть идеальным: вы получите результаты в предварительно отформатированной строке, которую затем можете разбить и построить с помощью
createElement()
и appendChild()
. Хотя для этого требуется немного больше кодирования, вы должны поддерживать кросс-браузерную поддержку (если браузер не слишком загружен, вы не можете использовать две функции, упомянутые выше).
- Это в значительной степени зависит от браузера (у меня были проблемы с Firefox и Internet Explorer), и вам, возможно, придется реализовать множество проверок и других функций, чтобы заменить текущий HTML, написанный внутри
searchContainer
.
Я бы выбрал номер 1, он сильно сбрасывает вес с вашего плеча.
Обновление:
По запросу я редактирую с примером 1). Предположим, что вы получите результаты в виде простого текста, сохраненные в xhr_results
и отформатированные так: text_1:value_1|text_2:value_2|...
(я не очень разбираюсь в XML, и для меня это проще).
var options = xhr_results.split('|');
var options_text = [];
var options_value = [];
for (var i = 0; i < options.length; i++){
options_text[i] = options[i].split(':')[0];
options_value[i] = options[i].split(':')[1];
}
var sel = document.createElement('select');
for (var i = 0; i < options.length; i++){
opt = document.createElement('option');
opt.text = options_text[i]
opt.value = options_value[i];
sel.appendChild(opt);
}
Этот фрагмент кода создаст вам выпадающее меню со всеми параметрами, переданными из AJAX.