Halli Hallo,
AJAX ist momentan eine Herausforderung für mich.
Ich möchte eine Funktion möglichst allgemein halten und diese ggf. in benötigten Dateien manipulieren, so wie jetzt.
Mein Anliegen ist, dass eine <select> mit Werten aus der Datenbank gefüllt wird. Nach Auswahl einer darin liegenden <option> wird per AJAX eine weitere Information aus der Datenbank geholt. Es handelt sich hier lediglich um ein Integer.
Dementsprechend wird in der zweiten <select> nur eine <option> sein, da in der Datenbank nur ein Integer dazu gibt.
Ich würde gerne mit diesem Wert weiterarbeiten, nämlich diesen Wert in einer for Schleife einbauen und diese soll so viele <option> ausgeben wie die Zahl aus der Datenbank groß ist.
Ich würde dafür gerne möglichst die Funktion selbst nicht anrühren wollen. Geht das im PHP Teil selbst?
AJAX ist momentan eine Herausforderung für mich.
Ich möchte eine Funktion möglichst allgemein halten und diese ggf. in benötigten Dateien manipulieren, so wie jetzt.
Mein Anliegen ist, dass eine <select> mit Werten aus der Datenbank gefüllt wird. Nach Auswahl einer darin liegenden <option> wird per AJAX eine weitere Information aus der Datenbank geholt. Es handelt sich hier lediglich um ein Integer.
Dementsprechend wird in der zweiten <select> nur eine <option> sein, da in der Datenbank nur ein Integer dazu gibt.
Ich würde gerne mit diesem Wert weiterarbeiten, nämlich diesen Wert in einer for Schleife einbauen und diese soll so viele <option> ausgeben wie die Zahl aus der Datenbank groß ist.
Ich würde dafür gerne möglichst die Funktion selbst nicht anrühren wollen. Geht das im PHP Teil selbst?
HTML:
// CHAIN SELECT
(function ($) {
$.fn.selectChain = function (options) {
var defaults = {
key: "id",
value: "label"
};
var settings = $.extend({}, defaults, options);
if (!(settings.target instanceof $)) settings.target = $(settings.target);
return this.each(function () {
var $$ = $(this);
$$.change(function () {
var data = null;
if (typeof settings.data == 'string') {
data = settings.data + '&' + this.name + '=' + $$.val();
} else if (typeof settings.data == 'object') {
data = settings.data;
data[this.name] = $$.val();
}
settings.target.empty();
$.ajax({
url: settings.url,
data: data,
type: (settings.type || 'get'),
dataType: 'json',
success: function (j) {
var options = [], i = 0, o = null;
for (i = 0; i < j.length; i++) {
// required to get around IE bug (http://support.microsoft.com/?scid=kb%3Ben-us%3B276228)
o = document.createElement("OPTION");
o.value = typeof j[i] == 'object' ? j[i][settings.key] : j[i];
o.text = typeof j[i] == 'object' ? j[i][settings.value] : j[i];
settings.target.get(0).options[i] = o;
}
// hand control back to browser for a moment
setTimeout(function () {
settings.target
.find('option:first')
.attr('selected', 'selected')
.parent('select')
.trigger('change');
}, 0);
},
error: function (xhr, desc, er) {
// add whatever debug you want here.
alert("an error occurred");
}
});
});
});
};
})(jQuery);
PHP:
if (@$_REQUEST['ajax']):
$link = mysql_connect('localhost', 'root', '');
if ($link == false)
trigger_error('Connect failed - ' . mysql_error(), E_USER_ERROR);
$connected = mysql_select_db('1555', $link);
if ($connected) {
$results = mysql_query('SELECT units FROM `e_books` WHERE book_name = "' . mysql_real_escape_string(strip_tags($_REQUEST['selectedBook'])) . '"');
$json = array();
while (is_resource($results) && $row = mysql_fetch_object($results)):
//$json[] = '{"book_name" : "' . $row->book_name . '"}';
$json[] = '"'.$row->units.'"';
endwhile;
echo '[' . implode(',', $json) . ']';
die(); // filthy exit, but does fine for our example.
} else {
user_error("Failed to select the database");
}
endif;
//...
<script type="text/javascript">
<!--
// CHAIN SELECT
$(function () {
var cat = $('#bookSelect');
var el = $('#unitSelect');
el.selectChain({
url: '/school/module/englisch/add_voc.php',
data: { ajax: true, anotherval: "anotherAction" }
});
cat.selectChain({
target: el,
url: '/school/module/englisch/add_voc.php',
data: { ajax: true}
}).trigger('change');
});
//-->
</script>
// ...
<select id="bookSelect" name="selectedBook">
<?php
$q = mysql_query("SELECT book_name FROM `e_books` ORDER BY book_name ASC");
while($row = mysql_fetch_object($q)):
echo '<option>'.htmlspecialchars_decode($row->book_name).'</option>'."\n";
endwhile;
?>
</select>
<select id="unitSelect" name="selectedBook">
<option>[none selected]</option>
</select>