2010-11-01 2 views
0

Initial JavaScript, чтобы получить строку/массив:PHP массив не образовал должным образом

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#table").tableDnD({ 
    onDrop: function(table, row){ 
     var rows = table.tBodies[0].rows; 
      var debugStr = ""; 
      for (var i=1; i<rows.length; i++) { 
       debugStr += rows[i].id+":"; 
       //debugStr += rows[i].id; 
      } 
     data = debugStr; // colon seperated 
     } 
    }); 
}); 
function sendData() 
{ 
    var packed = ""; // Initialize packed or we get the word 'undefined' 
    for (i = 0; (i < data.length); i++) { 
    if (i > 0) { 
     packed += ","; 
     } 
    packed += escape(data[i]); 
     } 
    document.data.data.value = packed; 
    document.data.submit(); 
} 
</script> 

Теперь в PHP ...

Верните мой массив/строку из поста:

$packed = $_POST['data']; 
$data = split(":", $packed); 
for ($i = 0; ($i < count($data)); $i++) { 
    $data[$i] = rawurldecode($data[$i]); 
    $data[$i] = str_replace(",", "", $data[$i]); 
    $data[$i] = str_replace(":", ",", $data[$i]); 
} 

создать массив из него:

$arrayUpdated = array(); 
foreach($data as $value) { 
    print_r($value); 
    $arrayUpdated[] = $value; 
    } 

, которая возвращает:

Array ([0] => 9,8,6,5,4,3,2,15,1,0,) 

, когда я ожидал:

Array ([0] => 9, [1] => 8, [2] => 6, [3] => 5, [4] => 4, [5] => 3, [6] => 2, [7] => 15, [8] => 1, [9] => 0,) 

, что у меня не так? Спасибо, Энди

+0

Что произойдет, если вы напечатаете print_r ($ упакован) прямо после того, как он перехватит массив POST? – SW4

+0

er ... поэтому 'sendData' вставляет запятую после каждого символа в' data'? Зачем? – Powerlord

ответ

2

Поскольку вы уже используете JQuery, не проще ли отправлять данные в формате JSON, а не вручную создавать его в двоеточие/запятую, а затем вручную разделять его на PHP?

В вашей странице JS заменить большую часть sendData() функции с вызовом $.toJSON(data);:

function sendData() { 
    document.data.data.value = $.toJson(data); 
    document.data.submit(); 
} 

В вашем PHP код, simlpy использовать json_decode() для загрузки данных в массив с точно такой же структурой, как вы был в Javascript.

$data=json_decode($_POST['data']); 
print_r($data); 

* Примечание: возможно, потребуется дополнительный плагин JQuery, чтобы получить toJSON() метод - см http://code.google.com/p/jquery-json/ для получения дополнительной информации.

+0

Не могли бы вы показать, как мне нужно отредактировать код js для этого? – Andy

+0

изменен, чтобы включить примеры кода и ссылку на то, где вы можете получить плагин $ .toJSON(). – Spudley

+0

хороший, я собираюсь поместить его, он должен упростить мой код. ура! – Andy

1

Не прямой ответа-, но если вам нужно быстро исправить вы могли бы сделать (в PHP):

// if $myarray=Array ([0] => 9,8,6,5,4,3,2,15,1,0,) ; 

$myarray=explode(",",$myarray[0]); 

Кроме того, обратите внимание, что функция split является устаревшим в PHP 5.3.0 , вы можете заменить explode.

+0

Это сделало трюк за то, как я это сделал, но в итоге использовал JSON, как указано выше. – Andy

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