У меня есть два элемента select, A и B: когда выбранный параметр A изменяется, параметры B должны быть соответственно обновлены. Каждый элемент в A подразумевает множество элементов в B, это отношение «один ко многим» (A содержит страны, B должен содержать города, расположенные в данной стране).
Функция do_ajax
должна выполнить асинхронный запрос:
function do_ajax(elem, mydata, filename)
{
$.ajax({
url: filename,
context: elem,
data: mydata,
datatype: "html",
success: function (data, textStatus, xhr) {
elem.innerHTML = data;
}
});
}
Чтобы обновить параметры B, я добавил вызов функции в onChange
событии A. Вот функция, которая запускается при срабатывании события 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');
}
}
Я читал в документации JQuery, которая data
может быть массивом (пары ключ-значение). Я получаю сообщение об ошибке, если ставлю:
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
Вместо этого я не получаю эту ошибку, если мои данные представляют собой строку:
var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];
Но мне нужна "версия массива" переменной в моем PHP-коде на стороне сервера.
Он Uncaught TypeError: Illegal invocation
находится в файле «jquery-1.7.2.min.js», который полностью сжат, поэтому я не мог понять, какая часть кода вызвала ошибку.
Есть ли какой-нибудь параметр, который я могу изменить в своем коде, чтобы он принимал данные как ассоциативный массив?