Giriş elemanı bir dizi olup olmadığını JQuery kullanarak serialize form verilerini göndermek nasıl

10 Cevap php

Benim PHP kodu bu kod parçası var:

while ($row = mysqli_fetch_assoc($result))
{
    extract($row);
    echo "<tr>";
    echo "<td bgcolor='#FFFFFF'><input id='bookArray[]' name='bookArray[]' type='checkbox' value='$book_id' />$book_id</td>";
    echo "<td bgcolor='#FFFFFF'>$threat_name</td>";
    echo "</tr>";
}

HTML sayfasında, ben bookArray [] seçilen kitaplar gönderdi dizi jQuery serialize () yöntemi kullanmak istiyorum. Benim JavaScript,

var selectedbooks = $("book_form").serialize();
alert (selectedbooks); 

Uyarı mesajı kutusunda, ben herhangi bir değer (boş dize) alamadım.

I Prototip kullanıyorum zaman önce, o güzel çalıştı.

10 Cevap

kolay: serialize().replace('%5B%5D', '[]')

Ben, veri sonrası kullanılarak gönderilen bir yöntem ile geldi

Diğer tarafta kullanarak elemanları $_['post']['name'] erişmenizi sağlar

Bir dizi (örneğin birden seçin) ise daha sonra sunucu üzerinde bir dizi olarak erişebilirsiniz tekrar $_POST['myselect'][0]...

Code: Function to serialize form data for post

function serializePost(form) {
    var data = {};
    form = $(form).serializeArray();
    for (var i = form.length; i--;) {
        var name = form[i].name;
        var value = form[i].value;
        var index = name.indexOf('[]');
        if (index > -1) {
            name = name.substring(0, index);
            if (!(name in data)) {
                data[name] = [];
            }
            data[name].push(value);
        }
        else
            data[name] = value;
    }
    return data;
}

JQuery için prototip / Scriptaculous serialize işlevselliği:

<script>
function toObjectMap( queryString )
{
    return '{\'' + queryString.replace(/=/g, '\':\'').replace(/&/g, '\',\'') + '\'}';
}
</script>
...
<div id="result"></div>
...
<form onSubmit="$('#result').load( ajaxURL, toObjectMap( $('#formId').serialize() ) );" ...>
...

jQuery 1.4

var myform = $("book_form").serialize();

decodeURIComponent(myform);

jQuery Post ile bir sorun değil, bunu yapabilirsiniz, tefrika ile bulunuyor:

    var my_query_str = ''; 
    $("input[@type='checkbox'][@name='books']").each( function() { 
       if(this.checked) { my_query_str += "&bookArray[]=" + this.value; } 
    }); 
   jQuery.post(
      "saveBookList.php",
      "dummy_data=a" + my_query_str ,
       function(responseData){   
          $("#save-result").empty().append(responseData); 
       }, 
       error: function() { 
            $("#save-result").append("An error occured during processing"); 
       }
   }); 

ama gerçekten yapmak zorunda '[' değiştirin & ']' Geri kendileri için bunları seri hale sonra. serialize () çünkü; Onların htmlencoded değerine onları değiştirdi!

Sen Tomalak anlaşılacağı @ olarak PHP değiştirmeniz gerekebilir, ama aynı zamanda javascript değiştirmeniz gerekir. Adlandırılmış bir unsur # isim seçiciyi kullanın başvurmak için:

var selectedbooks = $('form#book_form').serialize();;

Teşekkürler Tomalak.

PHP dosyasında, şimdi aşağıdaki kodu kullanıyorum:

  while ($row = mysqli_fetch_assoc($result))
  {
   extract($row);
   echo "<tr>";
   echo "<td bgcolor='#FFFFFF'><input id='$book_id' name='bookArray[]' type='checkbox' value='$book_id' />$book_id</td>";
   echo "<td bgcolor='#FFFFFF'>$book_name</td>";
   echo "</tr>";
  } // while

** Book_id benzersizdir.

Çözüm tvanfosson kullanarak, şimdi ben giriş değerinin dizisini almak mümkün duyuyorum

var selectedBooks = $('form#book_form').serialize(); alert (selectedBooks);

Uyarı mesajı kutusunda, i almak ==> bookArray% 5B% 5D = T2.05 & bookArray% 5B% 5D = T2.81

Şimdi, ben JQuery kullanarak PHP dosyası serialize giriş değerini gönderdi

var selectedBooks   = $('form#book_form').serialize();
alert (selectedBooks);

var url = 'saveBookList.php';

// Send to server using JQuery
$.post(url, {bookArray: selectedBooks},
      function(responseData){
        $("#save-result").text(responseData);
});

Inside saveBookList.php to process the serialize form, i got this error "Invalid argument supplied for foreach()".

SaveBookList.php içeride,

 // If you have selected from list box.
 if(isset($_POST['bookArray'])){

  // Get array or bookID selected by user
  $selectedBookId = $_POST['bookArray'];
  echo $selectedBookId;

  foreach($selectedBookId as $selectListItem)
  {
        echo "You sent this -->" . $selectListItem . "\n";

  }

}

I prototip kullanarak yolluyorum eğer yukarıdaki PHP kod çalışıyor.

For Prototype when i do echo $selectedBookId;

Ben Array var.

For JQuery, when i do echo $selectedBookId;

I got ==> bookArray%5B%5D=T4.11&bookArray%5B%5D=T4.38

Benim sorum, post yöntemi için jQuery destek dizi değeri nedir?

Sorun çözüldü! İşte ne yaptım.

Dinamik kutulardan satırları oluşturmak için PHP dosyası içinde,

  while ($row = mysqli_fetch_assoc($result))
  {
   extract($row);
   echo "<tr>";
   echo "<td bgcolor='#FFFFFF'><input name='books' type='checkbox' value='$book_id' />$book_id</td>";
   echo "<td bgcolor='#FFFFFF'>$book_name</td>";
   echo "</tr>";
  } // while

Artık JQuery $. Yazılan yöntemi kullanmayın. Ben şu benim kodu değişti

    var my_query_str = '';

$("input[@type='checkbox'][@name='books']").each(
  function()
  {
  	if(this.checked)
   	{
      	   my_query_str += "&bookArray[]=" + this.value;
   	}
  });


$.ajax(
{
    type: "POST",
    url: "saveBookList.php",
    data: "dummy_data=a" + my_query_str,
    success:
        function(responseData)
        {
            $("#save-result").empty().append(responseData);
        },
    error:
        function()
        {
            $("#save-result").append("An error occured during processing");
        }
});

Şimdi, saveBookList.php sayfası içinde, $ _POST ['bookArray'] değerini bir Array. Yey! Yey!

Umudumu yapmak ve Prototip yaptığı gibi JQuery $. Sonrası yöntemi dizi veri türünü destekleyebilir diliyorum. :)

work correctly jquery =>

var data = $('form').serialize();
            $.post(baseUrl+'/ajax.php',
                    {action:'saveData',data:data},
                    function( data ) {
                        alert(data);
                    });

php =>

parse_str($_POST['data'], $searcharray);
    echo ('<PRE>');print_r($searcharray);echo ('</PRE>');

çıkış =>

[query] => 
[search_type] => 0
[motive_note] => 
[id_state] => 1
[sel_status] => Array
    (
        [8] => 0
        [7] => 1
    )

and You can do whatever what you want like with array data, thanks to Aridane http://stackoverflow.com/questions/1792603

Bu dizi değil, sadece diğer girdi alanlarını göndermek için varsa, bu temiz ve hızlı bir çözümdür:

var selectedbooks = $('book_form input[name^="bookArray["]').serialize();
alert (selectedbooks); 

Açıklama:

Seçici ^ = bir isim öznitelik değeri '[' emin eleman biz serialize ve string 'bookArray' ile değil, sadece bir değişken başlangıç ​​istediğiniz dizi yapar 'bookArray', açık köşeli ayraç ile başlayan tüm öğeleri seçer.