如何在函数中定义全局变量和用例语句?

时间:2019-06-19 05:03:51

标签: javascript php

我想在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具有某个值,则第二个函数调用的两个函数具有相同的名称,但工作方式不同

1 个答案:

答案 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>