我正在尝试在我们的网站上为谷歌地图api做一个过滤器,这样人们就可以选择只显示与选中的位置相关的信息。我不确定通过ajax传递无限参数的最佳方式,因为它相对较新。通过选中相应的复选框,可以选择每个位置。下面是我尝试传递的代码。
//Example Checkbox
<input type="checkbox" checked name="locationID1" class="locationID" value="47">
$(".layer-button").click(function(){
var form = $(this).parents('form:first');
var locationID = [];
var n = 0;
$(".locationID", form).each(function () {
if(this.checked){
// part I'm having troubles with.
locationID[n] = $(this).val();
n++;
}
});
var data = {
"action":"addLayer",
"map-try-ok":"1",
// part I'm having troubles with.
"location_id":locationID
}
$.ajax({
type: "POST",
url: "/ajax/map/map.php",
dataType: "json",
data: data,
success: function(data) {
jQuery.each( data, function( key, val ) {
geocoder = new google.maps.Geocoder();
var color = $("select[name=color]", form).val();
var address = val["address"];
geocoder.geocode( { 'address': address}, function(results, status) {
if(results){
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location,
icon: "../image/icons/map/icon_marker"+color+".png",
title: val["name"],
url: ""
});
}
});
});
},
error: function(){return false;}
});
});
如果我像这样传递静态数字,代码就会工作得很好。
var data = {
"action":"addLayer",
"map-try-ok":"1",
"location_id":"47"
}
有没有一种通过ajax传递数组的最佳方式?我不确定是否可以在var数据的参数中运行each函数?
更新:
我将所有这些信息传递给PHP脚本。PHP向jquery返回的信息运行良好,我对实际的Google Maps API本身没有任何问题。这个问题是从jquery -> ajax -> php传递x变量。
我尝试使用以下代码调用location_id,但它完全传递了代码块,这让我相信传递数组是不起作用的。
if(is_array($_POST['location_id'])){
foreach($_POST['location_id'] as $location_id){
echo "ID: ".$location_id."<br />";
}
}
发布于 2015-02-03 03:55:15
在你的locationID
脚本中,数组形式的php会给出数组形式的$_POST['location_id']
。您可以使用foreach循环遍历它们
foreach ($_POST['location_id'] as $location_id){
//do something with $location_id
}
发布于 2015-02-03 04:26:49
简而言之:当前代码确实可以正常工作。
长长的答案:
好吧,伙计们,我很抱歉,我刚接触ajax,我发现了我的问题……在尝试测试它是否被正确传递时,我将dataType从"json“更改为"html”,因为我不再返回数组,而是返回一个回显以打印到屏幕。我没有意识到传递数组和返回数组都需要json,这就是为什么我永远不能让方法工作的原因。我最终在我的php错误日志中发现它试图命中代码,并且看到它实际上是在传递数组中的变量。
https://stackoverflow.com/questions/28285561
复制相似问题