2013-09-02 3 views
3

У меня есть форма с несколькими одинаковыми полями:JQuery: передать массив в AJAX

<input type="text" id="qte" value="" name="qte[]"> 

Как transmetre массив в моей обработке файла?

Я заметил, что массив, отправленный ajax, стал строкой.

$("#form_commande").submit(function(event){ 

var qte = $("#qte").val(); 

if(qte== '') 
{ 
    $('#qte_message').html("KO QTE"); 
} 
else 
{ 
    $.ajax({ 
     type : "POST", 
     url: $(this).attr('action'), 
     data: $(this).serialize(), 
     success : function(){ 
      $('#form_commande').html('<p>OK</p>'); 
     }, 
     error: function(){ 
      $('#form_commande').html("<p>KO</p>"); 
     } 
    }); 
} 
return false; 

}

+2

Возможный дубликат [Сериализация в JSON в jQuery] (http://stackoverflow.com/questions/191881/seria lizing-to-json-in-jquery) – Joren

+0

Если он отправляет строку, вам, вероятно, придется использовать 'serializeArray()'. –

+0

У вас не может быть нескольких полей с одинаковым ID. JQuery будет распознавать только первый, который он видит. ID - это уникальные идентификаторы. –

ответ

2

Это возвращает объект ввода текстового поля:

$("#qte"); 

Это возвращает значение входного текстового объекта:

$("#qte").val(); 

Remember вы просили объекта DOM с помощью id, и это по определению возвращает только один.

2

Пожалуйста, прочитайте эту тему: JQuery - Reading an array of form values and displaying it?

Короче говоря, вы должны итерацию с тегом name="qte[]" вместо использования идентификаторов. В DOM вы не можете иметь два разных объекта с разными идентификаторами.

var qte_array = new Array(); 
$('input[name="qte[]"]').each(function(){ 
    qte_array.push($(this).val()); 
}); 

После этого у вас есть все значения массива qte [] в одном объекте - qte_array. Вы можете позже сериализовать этот массив в JSON, а затем передать его как строку.

ALTHOUGH - вам не нужно делать все эти вещи. Вы можете отправить запрос ajax непосредственно с вашей формой, все эти данные на этих входах будут переданы в любом случае. Вам просто нужно обращаться с ними правильно на стороне сервера.

1

ID уникален, у вас не может быть больше полей с одинаковым идентификатором.

Кстати, вы должны преобразовать значения в JSON и передать их Ajax

+0

, это не самое главное. Я могу поставить класс вместо этого. –

3

Получить значение в JQuery, как:

$("#form_commande").submit(function(event){ 

    var qte_array = new Array(); 
    $('input[name="qte[]"]').each(function(){ 
     qte_array.push($(this).val()); 
    }); 

    if(qte_array.length== 0) 
    { 
     $('#qte_message').html("KO QTE"); 
    } 
    else 
    { 
     $.ajax({ 
      type : "POST", 
      url: $(this).attr('action'), 
      data: {qte:qte_array}, 
      success : function(){ 
       $('#form_commande').html('<p>OK</p>'); 
      }, 
      error: function(){ 
       $('#form_commande').html("<p>KO</p>"); 
      } 
     }); 
    } 
}); 

и получить его в PHP, как:

$qte = $_POST["qte"]; 

здесь qte массив

+0

У меня также есть имя, фамилия и адрес электронной почты. Как отправить данные (данные :) и восстановить $ _post [] в php? Благодарим за помощь –

+0

@ChristopheMartin: Изменить строку как данные: {qte: qte_array, фамилия: «Имя», адрес электронной почты: «email @ domain.ком "}, и получить его в PHP $ фамилия = $ _POST [" фамилия "]; $ электронная почта = $ _POST [" электронная почта "]; – Salim

+0

Отлично, мне очень нравится быть в состоянии передать массив непосредственно и получать его как массив – veeTrain

Смежные вопросы