#jquery
#jquery
Вопрос:
У меня есть этот массив
var car = new Array();
car['brand'] = "Ford";
car['color'] = "red";
car['type'] = 1;
теперь я попытался отправить это, но php только говорит мне, что car — это неопределенный индекс:
$.post('regCar.php', { "car[]": car }, function(data) {
// some other lol here ...
});
Отправка "car[]": ["Ford", "red", 1]
работает нормально: ( Как я могу передать ассоциативный массив в php?
Комментарии:
1. Не используйте массивы таким образом, используйте объекты. . Создайте
print_r($_POST)
и посмотрите, что вы получите.2. вы отправляете данные из php в ajax, но ваш заголовок обратный этому
3. @diEcho: Нет, он отправляет данные с помощью jQuery в PHP-скрипт.
Ответ №1:
Как упоминалось в моем комментарии, вам не следует использовать массивы таким образом. Используйте массивы только для числовых индексов:
Ассоциативные
Arrays
не разрешены … или, точнее, вам не разрешается использовать нечисловые индексы для массивов. Если вам нужна карта / хэш, используйтеObject
вместоArray
в этих случаях, потому что функции, которые вы хотите, на самом деле являются функциямиObject
, а не изArray
.Array
просто происходит расширениеObject
(как и любой другой объект в JS, и поэтому вы могли бы с таким же успехом использоватьDate
,RegExp
илиString
).
Именно по этой причине код не работает.
Взгляните на эту скрипку: предупреждение пустое, что означает, что jQuery вообще не сериализует (и, следовательно, не отправляет) какие-либо данные.
Можно было бы ожидать, что он, по крайней мере, отправит пустое значение, например car[]=
, но, по-видимому, это не так.
Если вы используете объект:
var car = {};
Ответ №2:
Прочитайте json_encode и json_decode
Комментарии:
1. теперь я попытался отправить это, но php только говорит мне, что car — это неопределенный индекс … вы неправильно поняли вопрос.
2. что? я запустил print_r в $ _POST , он пуст! ‘regCar.php ‘, {‘car’: car}, функция (данные) — это синтаксис 🙁
3. @Jason94: Где вы определяете
car
? Не могли бы вы, пожалуйста, опубликовать больше вашего кода?car
Доступен ли он оттуда, откуда вы вызываете$.post
? Что дает вамconsole.log(car)
непосредственно перед вызовом Ajax? Однако проблема действительно может заключаться в том, что вы используете массив вместо объекта.4. Потому что он хочет отправить данные из jQuery в PHP, а отправка
car
не работает. Функции PHP ему здесь тоже не помогут.
Ответ №3:
$.post('regCar.php ', {'car': car}, функция (данные) { // - Я изменил имя ключевого значения });
Вам не нужно добавлять скобки в параметр data
Тем не менее, я рекомендую вам использовать объекты JS.
var car = {};
car.brand = "Ford";
car.color = "red";
car.type = 1;
Если вы получаете неопределенную ошибку на стороне PHP, вам нужно опубликовать свой PHP-код.
Редактировать
Как указывает @Felix Kling, удаление массива в пользу объектов будет работать для вас.
Комментарии:
1. @Felix, похоже на то. Я где-то читал, что JS на самом деле не имеет связанных массивов и что он автоматически преобразует в объекты. Похоже, что объекты — это правильный путь