将Javascript数组传递给PHP文件

时间:2013-03-25 22:01:30

标签: php javascript arrays post get

所以我知道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页面中没有打印出来,这让我相信数组没有被传递。

4 个答案:

答案 0 :(得分:10)

我假设您提交表单时已经重新加载了您的页面,并且您没有遇到任何问题。如果是这样,您可以为该数据添加隐藏字段,并将其添加到表单提交之前的字段中:

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

答案 1 :(得分:5)

这可能是最直接的做法。它使用jQuery,这对这种东西很有用。第一部分只是在AJAX POST中将数组作为markers参数发送。

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

这部分是接收帖子并将JSON解码为PHP数组的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);

答案 2 :(得分:3)

您需要学习AJAX和JSON的基础知识。 jQuery可以帮助你,我建议它作为一个很好的起点。

使用AJAX提交JSON,然后使用$phpArray = json_decode($submittedJson);和viola,您将拥有一个提交的javascript对象的漂亮PHP数组。

答案 3 :(得分:1)

发送一个json对象并将其转换为json_decode($obj)

的数组