2013-03-25 4 views
5

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

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

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

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

Мой браузер:

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 даже хотя я знаю, что в массиве есть элементы, это заставляет меня думать, что массив не передается.

+7

ну тогда вам следует ознакомиться с AJAX. Это единственный способ сделать это ... –

+0

Довольно точно, единственный способ сделать это - с каким-то решением ajax. jQuery делает это очень легко, если у вас есть какой-либо опыт в этом. – dmikester1

ответ

3

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

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

1

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

+0

Нужно ли использовать разделители?Я не могу иметь разделителей, поскольку массив включает введенный пользователем текст, и я не хочу ограничивать, что пользователь может ввести. – intA

9

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

<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']); 
+2

+1 для указания, что AJAX - не единственное решение. –

+0

+1 Это хороший момент. Однако, вероятно, на самом деле проще работать с jQuery. Это не идеально для всего, но это хорошо для этого. – pseudosavant

+0

Это, кажется, имеет смысл, спасибо! Мне нужно указать файл php, который я ищу, чтобы отправить его куда-нибудь? Кроме того, если массив маркеров уже существует, это так же просто, как удаление этой строки, где вы создаете маркеры? – intA

4

Это, пожалуй, самый прямой способ сделать это. Он использует 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); 
Смежные вопросы