2017-01-17 4 views
0

Я посылаю некоторые сериализованные данные в PHP скрипт через AJAX:Перебора сериализованной сортировки таблицы

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'] вар без какого-либо преобразования, но я вместо того, чтобы получать сериализированную данные:

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

Как я могу петлю через это?

Заранее спасибо

ответ

1

Так вопрос с тем, как вы добавите детали в вашем АЯКСЕ вызова: функция «сериализация» возвращает строки не является объектом. Таким образом, вы захотите продолжать добавлять данные для сообщения в строку, как в:

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

Надеюсь, это поможет!

+0

Пробовал это, но '$ _POST [«вещи»]' вар все еще содержит сериализованные данные, а не массив PHP. Возможно, факт, что я добавляю параметр 'action' в параметр' data' в запросе AJAX, меняет все. – user1991185

+0

Doh - вы правы. Serialize возвращает строку, поэтому вы не сможете использовать ее непосредственно в качестве объекта для публикации. Я обновил свой ответ. – MacPrawn

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); 
    } 
?> 

И сделать что-то вроде:

$(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); 
 

 
});
<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>

Проверьте консоль и запрос браузера график, и вы увидите множество unnamed keys [0..n] со значениями, возвращаемыми вашим скриптом.

Проверить эту ссылку для объяснения, как работать с этим значения:

jQuery UI sortable not serializing with custom attributes

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