我想在php中声明如下两个全局变量
<?php
$a = "Nvalamap";
$b="Bvalamap";
?>
并且要在javascript函数定义的第二个文件中使用这些变量
<script>
function drawMapFromWms(latt,longt,complaintid){
$.ajax({
type: "GET",
url: "tools/nrega_v2.1/map.php",
data: 'complaintid='+complaintid,
success: function(data){
var data_array = JSON.parse(data);
$('.modal-info').html("");
var hrymap='<div id="hrymap"></div>';
$(".modal-info").append(hrymap);
$('#hrymap').html("");
$('#hrymap').html("<div id='map' style='width:850px;height:650px;'></div>");
var map = L.map('map');
setTimeout(function(){ map.invalidateSize(true)}, 300);
//map.setView([29.0, 76.776695], 8);
map.setView([29.0, 76.776695], 8);
map.fitBounds([
[latt,longt]
]);
L.tileLayer.wms("<?php echo $basemap; ?>", {
layers:'india3',
format: 'image/png',
transparent: true,
attribution:"Indian Remote Sensing Satellites"
//attribution: "Weather data © 2012 IEM Nexrad"
}).addTo(map);
L.tileLayer.wms("<?php echo $roadmap; ?>", {
layers:'hrcm_roads',
format: 'image/png',
transparent: true,
attribution:"text"
}).addTo(map);
var marker = L.marker([latt,longt]).addTo(map).bindPopup('Complaint ID:'+data_array.complaint_id+'</br>Road ID:'+data_array.road_id+'</br>Complainant Name:'+data_array.name+'</br>Complaint Type:'+data_array.feedback_type)
.openPopup();
map.invalidateSize();
$("#detail_content").css({'display':'block'});
}
});
}
/***********second function same but basemap and roadmap is differnt*****/
function drawMapFromWms(latt,longt,complaintid){
$.ajax({
type: "GET",
url: "tools/nrega_v2.1/map.php",
data: 'complaintid='+complaintid,
success: function(data){
var data_array = JSON.parse(data);
$('.modal-info').html("");
var hrymap='<div id="hrymap"></div>';
$(".modal-info").append(hrymap);
$('#hrymap').html("");
$('#hrymap').html("<div id='map' style='width:850px;height:650px;'></div>");
var map;
require([
"esri/map",
"esri/geometry/Point",
"esri/symbols/SimpleMarkerSymbol",
"esri/graphic",
"esri/layers/GraphicsLayer", "esri/layers/ArcGISDynamicMapServiceLayer","esri/layers/ArcGISTiledMapServiceLayer",
"dojo/domReady!"
], function(
Map, Point, SimpleMarkerSymbol, Graphic, GraphicsLayer,ArcGISDynamicMapServiceLayer,ArcGISTiledMapServiceLayer
) {
map = new Map("map", {
basemap: "<?php echo $basemap; ?>",
center: [76.0856,29.0588],
zoom: 10
});
map.on("load", function() {
var gl = new GraphicsLayer();
var p = new Point(76.0856,29.0588);
var s = new SimpleMarkerSymbol().setSize(60);
var g = new Graphic(p, s);
gl.add(g);
map.addLayer(gl);
map.addLayer(new ArcGISDynamicMapServiceLayer('<?php echo $roadmap; ?>'));
});
});
$("#detail_content").css({'display':'block'});
}
});
}
</script>
我想要一个onclick =“ drawMapFromWms(latt,longt,complaintid);”函数调用,如果$ a具有某个值,则它将根据大小写参数运行,然后在第二种情况下,如果$ b具有某个值,则第二个函数调用的两个函数具有相同的名称,但工作方式不同
答案 0 :(得分:1)
您的PHP变量是在服务器端创建的,而Javascript部分是在客户端执行的,因此您需要为客户端提供一种在其范围内访问这些变量的方法。一种方法是在Javascript块中输出$a
和$b
的值,然后将它们分配给window
范围(与全局JS变量非常接近)。>
<script>
window.a = '<?php print $a; ?>';
window.b = '<?php print $b; ?>';
</script>
由于代码在服务器端呈现,然后将被发送到客户端,因此等于:
<script>
window.a = 'Nvalamap';
window.b = 'Bvalamap';
</script>
(假设您在渲染之前设置了$a = 'Nvalamap';
,$b= 'Bvalamap';
)。
现在到您的问题的第二部分:
我想要一个onclick =“ drawMapFromWms(latt,longt,complaintid);”功能 调用,然后如果$ a有一些参数,它将根据大小写参数运行 值,然后在第二种情况下,如果$ b具有某些值,则调用第一个函数 然后第二个函数调用两个函数具有相同的名称,但工作 不同。
IMO,使用相同名称但具有不同功能的两个功能是不好的编码习惯,因为当相同功能的行为不同时,这可能会引起混淆。我建议使用一个函数,根据提供的输入或变量来决定采用哪种方法。坚持本示例的第一部分:
<script>
function drawMapFromWms(latt,longt,complaintid)
{
if (window.a !== '') {
handlerForVariableA(latt, longt, complaintid);
} else {
handlerForVariableB(latt, longt, complaintid);
}
}
function handlerForVariableA (latt, longt, complaintid)
{
// execute code that is relevant when "$a" was set on the server-side.
}
function handlerForVariableB (latt, longt, complaintid)
{
// execute code that is relevant when "$b" was set on the server-side.
}
</script>