Я хочу опубликовать массив на PHP с помощью AJAX, и при успешном возвращении значение возвращается к JavaScript. Вот мой код.
JavaScript:
$(document).ready(function(){ $.ajax({ type: "POST", url: "phparray.php", data: { array1: phparray }, success: function(data){ alert("success"); alert(data); } }); });
HTML:
<html> <head> <script type="text/javascript" src="jquery-2.0.2.js"></script> <script> var phparray = jQuery.makeArray(); for(var i=0; i<10 ; i++){ phparray.push(i); } </script> <script type="text/javascript" src="phparraypost.js"></script> </head> <body> </body> </html>
PHP:
<?php $n=$_POST['array1']; echo $n; ?>
Данные, которые я возвращаю, говорят
<br /> <b>Notice</b>: Array to string conversion in <b>C:\xampp\htdocs\php\phparray.php</b> on line <b>4</b><br /> Array
и у меня нет идеи, что может быть не так.
Код HTML, PHP и JavaScript находятся в разных файлах.
Проблема в вашем PHP – вы используете эхо в массиве. Вместо этого используйте var_dump .
<?php $n=$_POST['array1']; var_dump($n); ?>
Я придумал решение, используя $.param
. Эта функция используется внутри для преобразования значений элементов формы в сериализованное строковое представление. Я не уверен, выполняет ли оно ваше требование.
<script> $(document).ready(function(){ var phparray = new Object(); for(var i=0; i<10 ; i++){ phparray['val' + i] = i; //store value in object } $.ajax({ type: "POST", url: "phparray.php", data: { array1: $.param(phparray) //serialize data }, success: function(data){ alert("success"); alert(data); } }); }); </script>
PHP
$pieces = explode('&', $_POST['array1']); //explode passed serialized object $phparray = array(); foreach($pieces as $piece){ list($key, $value) = explode('=', $piece); $phparray[$key] = $value; //make php array } var_dump($phparray);
http://api.jquery.com/serializeArray/ делает это за вас, так как ваш уже использующий jquery ..
использовать это:
$("#formId").submit(function(event) { event.preventDefault(); var url = $(this).attr('action'); $.ajax({ url : url, data : $(this).serialize(), cache : false, contentType : false, processData : false, type : 'POST', success : function(data) { $('#result').html('<div class="notes">Done</div>'); } }); return false; });