Mam dwa wybrane elementy, A i B: kiedy wybrana opcja A ulegnie zmianie, opcje B. muszą zostać odpowiednio zaktualizowane. Każdy element w A implikuje wiele elementów w B, jest to relacja jeden do wielu (A zawiera narody, B powinno zawierać miasta znajdujące się w danej nacji).
Funkcja do_ajax
powinna uruchomić żądanie asynchroniczne:
function do_ajax(elem, mydata, filename)
{
$.ajax({
url: filename,
context: elem,
data: mydata,
datatype: "html",
success: function (data, textStatus, xhr) {
elem.innerHTML = data;
}
});
}
Aby zaktualizować opcje B, dodałem wywołanie funkcji w onChange
zdarzeniu A. Oto funkcja, która działa po wyzwoleniu zdarzenia onChange (of A
):
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');
}
}
Czytałem w dokumentach JQuery, że data
może to być tablica (pary klucz-wartość). Otrzymuję błąd, jeśli wstawię:
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
Zamiast tego nie otrzymuję tego błędu, jeśli moje dane są ciągiem:
var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];
Ale potrzebuję "wersji tablicowej" zmiennej w moim kodzie PHP po stronie serwera.
Uncaught TypeError: Illegal invocation
Znajduje się w „jQuery 1.7.2.min.js” pliku, który jest cały sprężonego, więc nie mogłem dowiedzieć się, jaka część kodu podniesiony błąd.
Czy jest jakieś ustawienie, które mogę zmienić w moim kodzie, aby akceptował dane jako tablicę asocjacyjną?
Z dokumentacji jQuery dla
processData
:Źródło: http://api.jquery.com/jquery.ajax
Wygląda na to, że będziesz musiał użyć
processData
do wysłania danych na serwer lub zmodyfikować skrypt php, aby obsługiwał zakodowane parametry kwerendy.źródło
Otrzymałem ten błąd podczas wysyłania obiektu FormData, ponieważ nie konfigurowałem poprawnie wywołania ajax. Poniższa konfiguracja rozwiązała mój problem.
źródło
To jest obiekt, a nie tablica:
Prawdopodobnie chcesz:
źródło
$_GET
tablicy po stronie serwera (var_export($_GET)
wyjściaarray ( 'undefined' => 'undefined', )
)$.ajax
obsługi:type:'get',
data
klucze powinny znajdować się w tablicy GET, prawda? A może mimo wszystko są wysyłane inną metodą żądania?data: {foo:'myfoo', bar:'mybar'}
, myślę, że może być inny problem.e[e.selectedIndex]
podczas gdy powinienem przekazać jego wartośće[e.selectedIndex].value
. Po naprawieniu tej usterki notacja obiektu działa dobrze.Niedawno ten sam problem został rozwiązany przez dodanie
traditional: true,
źródło
źródło
contentType
iprocessData
błąd będzie nadal wyświetlany. Dodałem dwa pola i zadziałało. Myślę, że op próbował wskazać dwie ważne dziedziny.źródło
Spróbuj tego:
źródło