У меня есть два элемента 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», который полностью сжат, поэтому я не мог понять, какая часть кода вызвала ошибку.
Есть ли какой-нибудь параметр, который я могу изменить в своем коде, чтобы он принимал данные как ассоциативный массив?
Из документации jQuery для
processData
:Источник: http://api.jquery.com/jquery.ajax
Похоже, вам придется использовать
processData
для отправки данных на сервер или изменить свой php-скрипт для поддержки параметров, закодированных в строке запроса.источник
Я получал эту ошибку при публикации объекта FormData, потому что я неправильно настраивал вызов ajax. Установка ниже устранила мою проблему.
источник
Это объект, а не массив:
Вы наверняка захотите:
источник
$_GET
серверную часть моего массива (var_export($_GET)
выходыarray ( 'undefined' => 'undefined', )
)$.ajax
обработчике:type:'get',
data
ключи должны быть в массиве GET, верно? Или, может быть, они все равно отправляются другим методом запроса?data: {foo:'myfoo', bar:'mybar'}
, думаю, может быть другая проблема.e[e.selectedIndex]
а должен был передать его значениеe[e.selectedIndex].value
. После исправления этого недостатка объектная нотация работает нормально.Недавно была такая же проблема, решена добавлением
traditional: true,
источник
источник
contentType
иprocessData
ошибка будет отображаться. Я добавил два поля, и у меня это сработало. Я думаю, что op пытался указать на два важных поля.источник
Попробуй это:
источник