Передача массива Javascript в файл PHP

Поэтому я знаю, что Javascript является клиентской, а PHP – серверной, что усложняет, но мне интересно, как это сделать.

У меня есть массив в моем javascript-коде (в файле HTML), и когда пользователь нажимает на кнопку отправки, я хочу, чтобы страница передавала этот массив на мою страницу PHP, которая затем берет эту дату и помещает ее в базу данных SQL.

Есть ли простой способ сделать это? Мой массив объявлен как этот var markers = []; это просто переменная в javascript-части кода.

Я смотрел на кучу других сообщений, касающихся этого, но все решения не соответствуют тому, что мне нужно сделать, или требуют слишком большого количества изменений для того, что я могу сделать прямо сейчас. Я не очень хорошо знаком с AJAX или JSON (точно не знаю, что это такое).

Мой Javascript:

 var markers = []; function placeMarker(location) { var clickedLocation = new google.maps.LatLng(location); var name = document.getElementById("checkname").value; var description = document.getElementById("description").value; var marker = new google.maps.Marker({ position: location, map: map, title: name, // This may cause a problem when reloading and editing an existing tour // url was found at: http://biostall.com/adding-number-or-letters-to-google-maps-api-markers icon: 'http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=' + markerId + '|FE6256|000000' }); marker.setMap(map); markers.push([markerId, name, marker.getPosition().lat(), marker.getPosition().lng(), description]); //alert("" + markers); markerId = markerId + 1; } google.maps.event.addListener(map, 'click', function(event) { placeMarker(event.latLng); }); google.maps.event.addListener(marker, "click", function() { map.removeOverlay(marker); marker.setMap(map); }); } window.onload = function() { var form = document.getElementById('theform'); form.addEventListener('submit', function(){ var markersField = document.getElementById('markers'); markersField.value = JSON.stringify(markers); }); } 

Мой HTML:

 <form action="portal.php" method="post" id="theform"> <input type="hidden" id="markers" name="markers"> <button>Submit</button> </form> 

В моем файле portal.php у меня есть:

 $markers = json_decode($_POST['markers']); echo $markers; 

На php-странице ничего не печатается, хотя я знаю, что в массиве есть элементы, это приводит меня к мысли, что массив не передается.

Я предполагаю, что ваша страница уже перезагружается, когда вы отправляете форму, и что у вас нет проблемы с этим. Если это так, вы можете добавить скрытое поле для этих данных и добавить его в поле непосредственно перед отправкой формы:

 <form method="post" id="theform"> <!-- your existing form fields --> <input type="hidden" id="markers" name="markers"> <button>Submit</button> </form> 

Затем используйте этот JavaScript

 window.onload = function() { var form = document.getElementById('myform'); form.addEventListener('submit', function(){ var markersField = document.getElementById('markers'); var markers = [1,2,3]; markersField.value = JSON.stringify(markers); }); } 

И добавьте это на свой PHP, где вы обрабатываете представленные данные формы:

 $markers = json_decode($_POST['markers']); 

Это, вероятно, самый прямой способ сделать это. Он использует jQuery, который хорош для такого рода вещей. Первая часть просто отправляет массив в качестве параметра markers в AJAX POST.

 // Javascript / jQuery $.ajax({ type: 'POST', data: markers, dataType: 'json', url: 'yourPHPFile.php' }); 

Эта часть является PHP, который получает сообщение и декодирует JSON в массив PHP.

 // PHP in 'yourPHPFile.php' // Santizing the string this way is a little safer than using $_POST['markers'] $markersFromPost = filter_input(INPUT_POST, 'markers', FILTER_SANITIZE_STRING); // Turn the sanitized JSON string into a PHP object $markers = json_decode($markersFromPost); 

Вам нужно будет изучить основы AJAX и JSON. jQuery может помочь вам в этом, и я бы рекомендовал его в качестве хорошей отправной точки.

Отправьте JSON с помощью AJAX, затем используйте $phpArray = json_decode($submittedJson); и альт, у вас будет хороший PHP-массив представленного объекта javascript.

отправьте объект json и преобразуйте его в массив с json_decode($obj)