Отправить массив из представления на контроллер с помощью ajax (Codeigniter) - PullRequest
0 голосов
/ 21 ноября 2018

Я очень новичок в веб-программировании, особенно в Codeigniter.И теперь я ищу, как передать / передать массив из представления в контроллер.

Эта часть моего HTML-скрипта в обзоре:

<tr class="rowdim"> <!-- ROW 1 -->
<td><input type="text"  id="bookid1" name="book_id[]" /></td>
<td><input type="text"  id="qty1" name="qty[]" /></td>
<td><input type="text"  id="uom1" name="uom_id[]" /></td>
</tr>

<tr class="rowdim"> <!-- ROW 2 -->
<td><input type="text"  id="bookid2" name="book_id[]" /></td>
<td><input type="text"  id="qty2" name="qty[]" /></td>
<td><input type="text"  id="uom2" name="uom_id[]" /></td>
</tr>

<tr class="rowdim"> <!-- ROW 3 -->
<td><input type="text"  id="bookid3" name="book_id[]" /></td>
<td><input type="text"  id="qty3" name="qty[]" /></td>
<td><input type="text"  id="uom3" name="uom_id[]" /></td>
</tr>

Мой ajax:

var det_book = document.getElementsByName("book_id[]");
var det_qty = document.getElementsByName("qty[]");
var det_uom = document.getElementsByName("uom_id[]");
var vdata = {det_book:det_book,det_qty:det_qty,det_uom:det_uom}
$.ajax({
    type:"POST",
    url:"<?php echo base_url(); ?>trans/StockIn/saveData",
    data:vdata,
    success:function(returnmsg){
        if (returnmsg=='""'){
             window.alert(msg);
         } else {
             window.alert(returnmsg);
         }
});

Контроллер:

 $det_book=$_POST["det_book"];
 $det_qty=$_POST["det_qty"];
 $det_uom=$_POST["det_uom"];
 $details = array();
 $index=0;
 foreach ($det_book as $baris){
 array_push($details,array(
    'book_id'=>$baris,
    'quantity'=>$det_qty[$index],
    'uom_id'=>$det_uom[$index]
));
$index++; }
$error="";
if (!$this->db->insert_batch('trx_inbound_detail',$details))
{
    $error = $this->db->error();
}

Любой промах или что-то не так с моим кодом?Уже искать в сообществе, но все еще не повезло.Цените, если вы также предлагаете другие способы.Спасибо

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018
Your first mistake is get the textbox value in multiple fields:

    var det_book = $('input[name^=book_id]').map(function(idx, elem) {
        return $(elem).val();
    }).get();

    var det_qty = $('input[name^=qty]').map(function(idx, elem) {
        return $(elem).val();
    }).get();

    var det_uom = $('input[name^=uom_id]').map(function(idx, elem) {
        return $(elem).val();
    }).get();

В php вы не упомянули индекс в foreach:

    foreach ($det_book as $index => $baris) {
         array_push($details,array(
            'book_id'=>$baris,
            'quantity'=>$det_qty[$index],
            'uom_id'=>$det_uom[$index]
        ));
    }

    print_r($details);
    exit();
0 голосов
/ 21 ноября 2018

Да, вы что-то упустили.Элемент с именем book_id[] не существует.Также у вас есть три входа с одинаковым именем.Проверьте эту ссылку , чтобы узнать, как передать массив с помощью ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...