将Javascript数组传递给PHP文件[重复]
Posted
技术标签:
【中文标题】将Javascript数组传递给PHP文件[重复]【英文标题】:Passing Javascript array to PHP file [duplicate] 【发布时间】:2013-03-15 13:48:50 【问题描述】:所以我知道 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 页面中也没有打印出来,这让我相信数组没有被传递。
【问题讨论】:
那么您应该熟悉 AJAX。这是做到这一点的唯一方法...... 很确定唯一的方法是使用某种 ajax 解决方案。如果你有这方面的经验,jQuery 会让它变得非常简单。 【参考方案1】:这可能是最直接的方式。它使用 jQuery,这对这类东西很有用。第一部分只是将数组作为 AJAX POST 中的 markers
参数发送。
// Javascript / jQuery
$.ajax(
type: 'POST',
data: markers,
dataType: 'json',
url: 'yourPHPFile.php'
);
这部分是 PHP 接收 post 并将 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);
【讨论】:
【参考方案2】:我假设您在提交表单时已经重新加载了您的页面,并且您对此没有任何问题。如果是这样,您可以为该数据添加一个隐藏字段,并将其添加到表单提交之前的字段中:
<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 指出 AJAX 不是唯一的解决方案 +1 这是一个很好的观点。不过,实际上使用 jQuery 可能更容易。它并不适合所有事情,但它对此有好处。 这似乎有道理,谢谢!我是否需要指定要发送到某个地方的 php 文件?另外,如果标记数组已经存在,是否就像删除创建标记的那条线一样简单? @Skytbest 你的表单不是已经有action
属性了吗?它告诉表单要提交给哪个 PHP。如果它丢失(如我的示例中),它会提交到当前文件。关于变量标记,是的,我的代码只是一个示例。你可以使用任何变量,只要它在范围内。
这太复杂了,无法在 cmets 中解决。我建议您发布一个新的后续问题,解释您遇到的新问题。现在,这超出了您原始问题的范围,顺便说一句,该问题已关闭,因此您无法在此处获得任何新答案。另外,不要忘记检查您的浏览器控制台,它会在发生 JavaScript 错误时向您显示,这是帮助您调试代码的重要信息。【参考方案3】:
发送一个json对象并将其转换为带有json_decode($obj)
的数组
【讨论】:
这是否使用分隔符?我真的不能有分隔符,因为数组包含用户输入的文本,我不想限制用户可以输入的内容。【参考方案4】:您需要学习 AJAX 和 JSON 的基础知识。 jQuery 可以帮助您解决这个问题,我推荐它作为一个很好的起点。
使用 AJAX 提交 JSON,然后使用 $phpArray = json_decode($submittedJson);
和 viola,您将拥有提交的 javascript 对象的漂亮 PHP 数组。
【讨论】:
以上是关于将Javascript数组传递给PHP文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章
将 Javascript 数组转换为 PHP 数组或将其传递给 PHP 文件
如何使用 POST 方法将 javascript/jQuery 变量传递给 PHP [重复]