Verwenden von Ajax zum Auffüllen eines Auswahlfelds

8

Ok, das ist mein allererster Versuch bei Ajax und es macht mich wahnsinnig, da ich es wirklich nicht verstehen kann. Was versucht wird, ist, die erste Box mit den Kunden aus der Datenbank zu füllen und dann die customerID zu verwenden, um alle Fahrzeug-IDs aus der Datenbank mit dem Skript select.php auszuwählen. Was passiert ist, ist die Kunden-Box wird ausgewählt, aber wenn die Auswahl eines Kunden geschieht nichts.

Das ist meine Test.php Datei:

%Vor%

Das ist meine select.php Datei:

%Vor%

Ich versuche dieses Tutorial zu ändern, um mit den Datenbanken zu arbeiten, aber bisher bin ich nicht erfolgreich. Ссылка

In der Chrome-Konsole erhalte ich den Fehler:

%Vor%     
Iain Simpson 28.06.2013, 14:40
quelle

3 Antworten

19

Das Änderungsereignis Ihrer Kundenauswahl wird zugewiesen, bevor die Auswahl auf der Seite gerendert wird. Verschieben Sie den Ereignishandler in document.ready:

%Vor%

Ich habe auch $$('#customer') in $('#customer') geändert. Schließlich beheben Sie Ihre SQL-Injection-Schwachstelle:

%Vor%

Wenn Sie die ID als int übergeben, wird SQLi hier verhindert. Sie sollten jedoch eine vorbereitete Anweisung in Betracht ziehen .

Der Fehler, den Sie in der Frage erwähnt haben, hängt nicht mit Ihrem Code zusammen. Es sieht mit einer Chrome-Erweiterung zusammen.

Nicht Teil des Problems, aber hier ist eine verbesserte Version Ihres Codes, der die Fahrzeugoptionen erstellt:

%Vor%

Die Verbesserungen sind:

  • Speichern der Auswahl in einer Variablen, so dass wir das DOM nicht bei jeder Iteration der Schleife erneut abfragen müssen
  • Verwenden Sie new Option(...) und .append() , um die Optionen zu erstellen und sie der Fahrzeugauswahl hinzuzufügen. Gebäudeelemente wie dieses sind besser als das Erstellen von Roh-HTML, da Sie sich in den Daten nicht um Zeichen wie < und > kümmern müssen - was Ihren HTML-Code mit dem aktuellen Code brechen würde.
  • Ihre Daten werden in ein Array von Javascript-Objekten dekodiert, daher wird die Objektnotation bevorzugt ( data[x].id ) anstelle von data[x]['id'] .
MrCode 01.07.2013, 08:45
quelle
2

Sieht so aus, als würden Sie bei jeder Iteration in select.php ein Array von JSON-Objekten erstellen.

Unten wird das Array in PHP erzeugt und dann JSON-kodiert, was meiner Meinung nach der beste Weg ist JSON-Zeichenfolgen generieren.

%Vor%     
AlexP 28.06.2013 14:59
quelle
2

Vielleicht probiere live anstelle von on . Es ist veraltet, aber ich fand heraus, dass es eher funktioniert, wenn das Element nicht geladen wird.

  

$$ ('# customer'). on ('change', function () {

wurde in

geändert
  

$ ('# customer') live ('change', function () {

    
rebe100x 04.07.2013 10:16
quelle

Tags und Links