Ich habe zwei Auswahlelemente, A und B: Wenn sich die ausgewählte Option von A ändert, müssen die Optionen von B entsprechend aktualisiert werden. Jedes Element in A impliziert viele Elemente in B, es ist eine Eins-zu-Viele-Beziehung (A enthält Nationen, B sollte Städte enthalten, die sich in der gegebenen Nation befinden).
Die Funktion do_ajax
sollte die asynchrone Anforderung ausführen:
function do_ajax(elem, mydata, filename)
{
$.ajax({
url: filename,
context: elem,
data: mydata,
datatype: "html",
success: function (data, textStatus, xhr) {
elem.innerHTML = data;
}
});
}
Um die Optionen von B zu aktualisieren, habe ich einen Funktionsaufruf in das onChange
Ereignis von A eingefügt . Hier ist die Funktion, die ausgeführt wird, wenn das onChange-Ereignis (von A
) ausgelöst wird:
function my_onchange(e) // "e" is element "A"
{
var sel_B = ... ; // get select element "B"
// I skipped some code here
// ...
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
do_ajax(city_sel, data, 'ajax_handler.php');
}
}}
Ich habe in JQuery-Dokumenten gelesen, dass es data
sich um ein Array handeln kann (Schlüsselwertpaare). Ich erhalte den Fehler, wenn ich setze:
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
Stattdessen erhalte ich diesen Fehler nicht, wenn meine Daten eine Zeichenfolge sind:
var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];
Aber ich brauche die "Array-Version" der Variablen in meinem serverseitigen PHP-Code.
Das Uncaught TypeError: Illegal invocation
befindet sich in der Datei "jquery-1.7.2.min.js", die alle komprimiert ist, sodass ich nicht herausfinden konnte, welcher Teil des Codes den Fehler ausgelöst hat.
Gibt es eine Einstellung, die ich in meinem Code ändern kann, damit Daten als assoziatives Array akzeptiert werden?
Aus den jQuery-Dokumenten für
processData
:Quelle: http://api.jquery.com/jquery.ajax
Sieht so aus, als
processData
müssten Sie Ihre Daten an den Server senden oder Ihr PHP-Skript ändern, um querystring-codierte Parameter zu unterstützen.quelle
Ich habe diesen Fehler beim Posten eines FormData-Objekts erhalten, weil ich den Ajax-Aufruf nicht richtig eingerichtet habe. Das folgende Setup hat mein Problem behoben.
quelle
Dies ist ein Objekt, kein Array:
Sie wollen wahrscheinlich:
quelle
$_GET
serverseitige Array-Ausgabe (var_export($_GET)
Ausgängearray ( 'undefined' => 'undefined', )
) übergeben werden$.ajax
Handler zu definieren:type:'get',
data
sollten Schlüssel im GET-Array gefunden werden, oder? Oder werden sie trotzdem über eine andere Anforderungsmethode gesendet?data: {foo:'myfoo', bar:'mybar'}
, es könnte ein anderes Problem geben, denke ich.e[e.selectedIndex]
während ich seinen Wert hätte übergeben sollene[e.selectedIndex].value
. Nachdem dieser Fehler behoben wurde, funktioniert die Objektnotation einwandfrei.Hatte das gleiche Problem vor kurzem durch Hinzufügen gelöst
traditional: true,
quelle
quelle
contentType
undprocessData
wird der Fehler weiterhin angezeigt. Ich habe die beiden Felder hinzugefügt und es hat bei mir funktioniert. Ich denke, op hat versucht, die beiden wichtigen Felder anzugeben.quelle
Versuche dies:
quelle