循环遍历序列化的可排序表

时间:2017-01-17 20:31:38

标签: jquery ajax jquery-ui serialization jquery-ui-sortable

我通过AJAX将一些序列化数据发送到PHP脚本:

HTML:

<table class="mytable">
    <tbody>
        <tr id="item_01">
            <td>content</td>
        </tr>
        <tr id="item_02">
            <td>content</td>
        </tr>
        <tr id="item_03">
            <td>content</td>
        </tr>
        <tr id="item_04">
            <td>content</td>
        </tr>
        <tr id="item_05">
            <td>content</td>
        </tr>
    </tbody>
</table>

JS:

$( '.mytable tbody' ).sortable({
    update: function() {
        items = $( this ).sortable( 'serialize' );
        $.ajax({
            url: 'ajax.php',
            type: 'post',
            data: { action: 'foo', items }
            cache: false,
            error: function() {
                console.log( 'Error' );
            }
        });
    }
});

PHP:

$action = $_POST['action'];
if ($action == 'foo') {
    $items = $_POST['items'];
    for ( $i = 0; $i < count($items); $i++ ) {
        .....
    }
}

我的印象是,人们可以在没有任何转化的情况下遍历$_POST['items'] var,但我会获得序列化数据:

item[]=val_1&item[]=val_2&item[]=val_3& ... &item[]=val_n

我如何循环使用?

提前致谢

2 个答案:

答案 0 :(得分:1)

所以问题在于你在ajax调用中发布项目的方式:&#34;序列化&#34;函数返回字符串而不是对象。因此,您希望继续将字符串数据添加到字符串中,如下所示:

...
data: 'action=foo&' + items // items is a string of the form "item[]=content&item[]=content..."
...

希望这有帮助!

答案 1 :(得分:1)

检查一下,并在链接中向我们提供解决方案所需的具体解决方案:

How do I PHP-unserialize a jQuery-serialized form?

我已在c9.io上进行了代码预览,但它运行正常。尝试使用类似的代码创建外部ajax.php:

<?php
    $action = $_POST['action'];
    if ($action == 'foo') {
        $items = $_POST['items'];

        parse_str($_POST['items'], $params);
        var_dump($params);
    }
?>

制作类似的东西:

&#13;
&#13;
$(document).ready(function(){
  var items = $('.mytable tbody').sortable();
  items = items.sortable('serialize');

  var ajaxRequest = function(){
    $.ajax({
      url: 'ajax.php',
      type: 'post',
      data: {
        action: 'foo',
        items
      },
      cache: false,
      complete: function(data){
        console.log(data)
      },
      error: function() {
        console.log('Error');
      }
    });
  };

  setInterval(function(){
    ajaxRequest();
  }, 2000);

});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

<table class="mytable">
  <tbody>
    <tr id="item_01">
      <td>content</td>
    </tr>
    <tr id="item_02">
      <td>content</td>
    </tr>
    <tr id="item_03">
      <td>content</td>
    </tr>
    <tr id="item_04">
      <td>content</td>
    </tr>
    <tr id="item_05">
      <td>content</td>
    </tr>
  </tbody>
</table>
&#13;
&#13;
&#13;

检查您的控制台和浏览器请求时间线,您将看到一些未命名的键[0..n],其中包含您的脚本返回的值。

检查此链接以获取有关如何使用此值的说明:

jQuery UI sortable not serializing with custom attributes