Отправка массива с помощью jquery post

#php #jquery #arrays

#php #jquery #массивы

Вопрос:

У меня есть страница php, которая содержит массив полей ввода, расположенных в таблице. Каждая строка содержит информацию о каждом члене фонда. и разные столбцы относятся к деньгам, выплаченным ими под разными заголовками. Я хочу использовать это для обновления таблицы mysql, которая содержит учетные записи пользователей. Как создать из этого массив и отправить post-запрос с помощью jquery?

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/javascript" src="js/jquery-ui-1.10.4.custom/js/jquery-1.10.2.js"></script>
<script type="text/javascript">


jQuery.noConflict();
jQuery.validator.setDefaults({
    submitHandler: function () {

        //create an array of values in each row
        jQuery.post("scripts/update.php", {

            //send array to the script
        }, function (data) {

            alert(data);
        });
    }
});



</script>

</head>

<body>
<form id="form1" name="form1" action="">
<table><tr><th>Mem No.</th><th>Subcription</th><th>Loan</th><th>Interest</th></tr>
<tr><td>
<input type="text" id="memberno1"  value="1001"/></td><td><input type="text" id="sub1" /></td><td><input type="text" id="loan1"/></td><td> <input type="text" id="int1" /></td></tr>

<tr><td>
<input type="text" id="memberno2"value="1002" /></td><td><input type="text" id="sub2" /></td><td><input type="text" id="loan2"/></td><td> <input type="text" id="int2" /></td></tr>
<tr><td>
<input type="text" id="memberno3" value="1003"/></td><td><input type="text" id="sub3" /></td><td><input type="text" id="loan3"/></td><td> <input type="text" id="int3" /></td></tr>
<tr><td>
<input type="text" id="memberno4" value="1004"/></td><td><input type="text" id="sub4" /></td><td><input type="text" id="loan4"/></td><td> <input type="text" id="int4" /></td></tr>
<tr><td>
<input type="text" id="memberno5" value="1005"/></td><td><input type="text" id="sub5" /></td><td><input type="text" id="loan5"/></td><td> <input type="text" id="int5" /></td></tr>
<tr><td>
<input type="text" id="memberno6" value="1006"/></td><td><input type="text" id="sub6" /></td><td><input type="text" id="loan6"/></td><td> <input type="text" id="int6" /></td></tr>
<tr><td>
<input type="text" id="memberno7" value="1007"/></td><td><input type="text" id="sub7" /></td><td><input type="text" id="loan7"/></td><td> <input type="text" id="int7" /></td></tr></table>
<input type="submit" valueue="Save" id="submit"/>
</form>
</html>
  

Комментарии:

1. Формы отправляют свои данные в парах имя / значение. Каждому из ваших элементов управления требуется имя — замените id= на name = . Если вы хотите использовать массивы для передачи данных, тогда используйте name=’int[]’, поскольку php обработает эти массивы.

Ответ №1:

Что ж, выполните итерацию по всем строкам таблицы и для каждой выполните итерацию по всем полям ввода:

 var arr = $('#form1 tr:gt(0)').map(function() {
    return [$('input', this).map(function() {
        return this.value;
    }).get()];
}).get();
  

ДЕМОНСТРАЦИЯ

Одно предостережение заключается в том, что вы должны полагаться на порядок каждого поля.

Комментарии:

1. Я проверил демо и не получил выходных данных. Я попробовал то же самое в своем скрипте, но возвращенный массив представлял собой разделенные запятыми значения всех полей ввода, а не многомерный массив

2. @mansoondreamz Я думаю, что вы запустили его с первой версией моего ответа, потому что код, написанный выше, выдает многомерный массив.

3. Я использовал приведенный выше код без каких-либо изменений. Смотрите это jsbin.com/netayaga/2/edit Если я ввожу некоторые значения, он не принимает

4. Хорошо, я понял это и отправлю обратно результат

Ответ №2:

Вам нужно создать пустой массив array и поместить туда все входные данные, а затем использовать его в своем сообщении. Что-то вроде этого:

 jQuery.noConflict();
jQuery.validator.setDefaults({
    submitHandler: function () {

        var inputArray = [];

        $('#form').find('input[type=text]').each(function() {
            // get the value or something from each input

            inputArray.push($(this).val());
        })

        //create an array of values in each row
        jQuery.post("scripts/update.php", {
            'inputs' : inputArray //send array to the script
        }, function (data) {
            alert(data);
        });
    }
});
  

Вы должны получить inputs в виде массива значения из ваших входных текстов. Надеюсь, это поможет

Ответ №3:

используйте jQuery.post(url, данные, обратный вызов)

Используя serialize, вы можете отправить всю форму автоматически.

    jQuery.post("scripts/update.php", 
              $("form#form1").serialize(), 
              function (data) {
                 alert(data);
              });
  

Ответ №4:

 $.ajax({
 url: 'ajax-post-url.php',
 type: 'POST', // or GET method
 dataType: 'json',
 data: $('.form').serialize(), // all data
 success: function(response) {
    console.log(response);
 }
});
  

или

 $.post('ajax-post-url.php', $('.form').serialize(), function(response) {
 console.log(response);
});