Sie sind genau richtig Mohammed. Es würde nicht so funktionieren, wie ich es erwartet hatte. Ich habe nicht wirklich versucht, einen Ajax-Anruf zu machen, sondern nur um eine Alarmbox zu bekommen; Ich wollte nur bestätigen, dass der Anruf funktionierte und das PHP lief. Das alert('Successfully called');
zu alert(result);
zu ändern und den Text vom php zu lesen bestätigte definitiv, dass das PHP die ganze Zeit lief.
Ich möchte am Thema bleiben, so wird ein anderes Thema, wenn das ist, was benötigt wird, aber haben eine Follow-up-Frage. Um ein bisschen mehr darüber zu machen, was ich versuche, versuche ich eine Funktion in meiner PHP-Datei auszuführen, die wiederum eine Template-Variable aktualisiert. Als Beispiel, hier ist eine solche Funktion:
function get_vehicle_makes()
{
$sql = 'SELECT DISTINCT make FROM phpbb_vehicles
WHERE year = ' . $select_vehicle_year;
$result = $db->sql_query($sql);
while($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('vehicle_makes', array(
'MAKE' => $row['make'],
));
}
$db->sql_freeresult($result);
}
Jetzt weiß ich, dass diese Funktion funktioniert. Ich kann dann Zugriff auf diese Funktion in meinem Javascript mit:
<!-- BEGIN vehicle_makes -->
var option = document.createElement("option");
option.text = ('{vehicle_makes.MAKE}');
makeSelect.add(option);
<!-- END vehicle_makes -->
Dies ist eine Blockschleife und wird Schleife durch den Block Variablensatz in der PHP-Funktion. Dies funktioniert beim Laden der Seite, weil die Seite, die geladen wird, die new.php ist, mit der ich versuche, einen Ajax-Aufruf auszuführen, und alle PHP-Dateien werden beim Laden in dieser Datei ausgeführt. Allerdings muss ich die Funktion erneut ausführen, um diese Blockvariable zu aktualisieren, da sie sich aufgrund einer Auswahländerung im HTML ändern wird. Ich weiß nicht, ob diese Art von Blockschleife üblich ist. Ich lerne über sie, da sie mit einem Forum verwendet werden, das ich auf meiner Website phpBB installiert habe. (Ich habe in ihren Support-Foren nach Hilfe gesucht.). Ich denke, eine andere mögliche Lösung wäre, ein Array zurückzugeben, aber ich würde gerne an der Blockvariable bleiben, wenn es aus Konsistenzgründen möglich wäre.
ich diese Bedingung bin mit und schalten Sie die Funktion aufzurufen:
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
//Get vehicle vars - $select_vehicle_model is used right now, but what the heck.
$select_vehicle_year = utf8_normalize_nfc(request_var('vehicle_year', '', true));
$select_vehicle_make = utf8_normalize_nfc(request_var('vehicle_make', '', true));
$select_vehicle_model = utf8_normalize_nfc(request_var('vehicle_model', '', true));
switch($action) {
case 'get_vehicle_makes' :
get_vehicle_makes();
break;
case 'get_vehicle_models' :
get_vehicle_models();
break;
// ...etc...
}
}
Und das ist das Javascript, um die Ajax auszuführen:
function updateMakes(pageLoaded) {
var yearSelect = document.getElementById("vehicle_year");
var makeSelect = document.getElementById("vehicle_make");
var modelSelect = document.getElementById("vehicle_model");
$('#vehicle_make').html('');
$.ajax({ url: '/posting.php',
data: {action: 'get_vehicle_makes'},
type: 'post',
success:function(result)//we got the response
{
alert(result);
},
error:function(exception){alert('Exception:'+exception);}
});
<!-- BEGIN vehicle_makes -->
var option = document.createElement("option");
option.text = ('{vehicle_makes.MAKE}');
makeSelect.add(option);
<!-- END vehicle_makes -->
if(pageLoaded){
makeSelect.value='{VEHICLE_MAKE}{DRAFT_VEHICLE_MAKE}';
updateModels(true);
}else{
makeSelect.selectedIndex = -1;
updateModels(false);
}
}
Die Javascript läuft, und die AJAX erfolgreich sein. Es scheint, dass die Blockvariable nicht gesetzt ist.
Also in einem Server-Skript schreiben Sie ein Client-Skript? –
Dieses Skript wird nicht selbst ausgeführt ... es ist einfach eine Textzeichenfolge, die in 'result' verfügbar ist. Browser weiß nichts über das Ausführen, weil es nicht in der Dom – charlietfl
Dies wird nicht passieren, wie Sie es tun –