PHP:使用来自 php 的参数调用 javascript 函数

2023-12-01

我正在尝试使用 PHP 变量参数调用 JavaScript 函数。 我尝试了两种方法。

  1. 在 PHP 中使用 echo 中的脚本标签调用 JavaScript 函数 IE

    <?php
    echo '<script>initialize('.$lat.','.$lang.','.$zom.');</script>';
    ?>
    
  2. 将 PHP 变量值赋给 JavaScript 变量

    
    
     <script>
     var lat="<?php echo $lat;?>";
     var lang="<?php echo $lang; ?>";
     var zoom="<?php echo $zoom; ?>";
     alert(lat+lang+zoom);
     initialize(lat,lang,zoom);
     </script>
       

在第一种情况下,当我从页面源交叉检查时调用函数,但传递的参数未定义。 在第二种情况下,值已成功保存在 JavaScript 变量中,通过alert() 检查它,但未调用函数。

这是整个代码:

<!DOCTYPE html>

<html>

<head>

    <script src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDY0kkJiTPVd2U7aTOAwhc9ySH6oHxOIYM&sensor=false">

    </script>
<?php
     if(  isset($_POST['lat']) && isset($_POST['lang']) && isset($_POST['zoom']) && isset($_POST['city'])):

        $lat=$_POST['lat']; 

        $lang=$_POST['lang'];

        $zoom=$_POST['zoom'];

        $city=$_POST['city'];
        $zom=(int)$zoom;
              var_dump($lang);
        var_dump($lat);
        //var_dump($zoom);
              var_dump($zom);
          //echo '<script>initialize('.$lat.','.$lang.','.$zom.');</script>';

    endif;

?>          


<script>
var lat="<?php echo $lat; ?>";
var lang="<?php echo $lang; ?>";
var zoom="<?php echo $zoom; ?>";
alert(lat+lang+zoom);
initialize(lat,lang,zoom);
</script>

    <script>


function initialize(a,b,zom){        

    if (!a || !b ||!zom){ 
    alert('came on not' +a+b +zom);

    //      var centerLoc=new google.maps.LatLng( 33.61701054652337,73.37824736488983);

          zoom=16;

    }

    else

    {
        alert('came');

        var zoom =parseInt(zom);

        var centerLoc=new google.maps.LatLng(a,b);

    }

       var mapProp = {

            center:centerLoc,

            zoom:zoom,

            //mapTypeId:google.maps.MapTypeId.ROADMAP

            mapTypeId:google.maps.MapTypeId.SATELLITE

       };  

       var map=new google.maps.Map(document.getElementById("googleMap") ,mapProp);

            marker=new google.maps.Marker({

                  position:centerLoc,

                  title:'Click to zoom'

             });

    google.maps.event.addListener(marker,'click',function() {

                map.setZoom(map.getZoom()+1);

                map.setCenter(marker.getPosition());

       });

            marker.setMap(map);

}

       google.maps.event.addDomListener(window, 'load', initialize);

</script>

</head>

<body style= "background-color:gainsboro;">

    <form method="POST"  action="myPage.php" >

        Enter latitude:     <input type ="text" name="lat" id="lat" / ><br/>

        Enter longitude:    <input type ="text" name="lang"  id="lang"/ ><br/>

        Enter City Name:    <input type="text" name="city" id="city"/><br/>

        Enter Zoom level:   <input type ="text" name="zoom"  id="zoom"/ ><br/>

                        <input type="button" value ="Perview" onclick=" initialize(

                     document.getElementById('lat').value,

                     document.getElementById('lang').value,

                     document.getElementById('zoom').value)"/>

                        <input type="Submit"  value="Save" />

    </form>

                        <center><div id="googleMap"  style="width:1000px;height:500px;"></div></center>

</body>

</html>

Use json_encode()。如果不这样做,当数据从 PHP 传递到 HTML/JS 层时,您总是有可能错误地转义数据。

$vars = array($lat, $lang, $zoom);
// JSON_HEX_TAG and JSON_HEX_AMP are to remove all possible surprises that could be
// caused by vars that contain '</script>' or '&' in them. The rules for 
// escaping/encoding inside script elements are complex and vary depending 
// on how the document is parsed.
$jsvars = json_encode($vars, JSON_HEX_TAG | JSON_HEX_AMP);

echo "<script>initialize.apply(null, $jsvars)</script>";

一般来说,为了您的理智,您需要提供给当前页面上运行的 js 使用的所有 PHP 数据都应该收集到单个 PHP 数组中,然后放入单个 js 对象中。例如:

<?php
$jsdata = array(
   'formvars' => array(
                      'lat' => $lat,
                      'lang' => $lang,
                      'zoom' => $zoom
    ),
   'username' => $username,
   'some_other_data' => $more stuff
);
?>
<script>
  var JSDATA = <?=json_encode($jsdata, JSON_HEX_TAG | JSON_HEX_AMP )?>;
  initialize(JSDATA.formvars.lat, JSDATA.formvars.lang, JSDATA.formvars.zoom);
</script>

现在,JS 和 PHP/HTML 层之间只有一个接触点,因此您可以轻松跟踪放入 JS 命名空间的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP:使用来自 php 的参数调用 javascript 函数 的相关文章

随机推荐

  • Java中的字符串数组初始化[重复]

    这个问题在这里已经有答案了 如果我声明一个String array String names new String 3 那么为什么我们不能像这样给上面声明的数组赋值 names Ankit Bohra Xyz 申报时您可以进行以下操作 St
  • Delphi XE6 - 使用“USE_INDY”构建的 SOAP 通过代理问题连接到 Web 服务

    我有一个使用连接到网络服务的应用程序THttpRio成分 Web服务有基本的身份验证 我使用 USE INDY 指令编译了 Delphi SOAP 单元 以便 THttpRio 组件使用 WinHttp 现在我需要通过代理访问我的网络服务
  • 尝试使用 Swift AVPlayer 播放音频

    这是我当前的视图控制器 import UIKit import AVFoundation class SecondViewController UIViewController override func viewDidLoad var p
  • 重叠的 AWT 线和 Swing JLabels

    我在使用线基元的应用程序中遇到问题JLables 我尝试解释一下 我必须使用线条来代表道路来绘制车辆路线JLabels来代表城市 我需要使用JLabels因为每个 JLabel 都有一个监听器 用于显示包含城市信息的对话框 我重新定义pai
  • 如果返回值被忽略,如何发出警告?

    我想查看我的代码 C 中忽略函数返回值的所有位置 我怎样才能做到这一点 使用 gcc 或静态代码分析工具 错误代码示例 int f int z return z z 2 z 3 z z 23 int main int i 7 f i lt
  • Ajax 会话丢失

    我将 Symfony 应用程序从 Symfony 4 0 7 升级到 Symfony 4 1 之后 AJAX 调用会丢失会话值 我同时调用了大约 6 个 ajax 请求 第一个进展顺利 但其他人正在失去会话值 它仅在迁移到 Symfony
  • 用golang封装一个包

    想象一个导出一些结构和一些函数的包 如果我想围绕该包制作一个包装器 以便它可以用作插件 我是否应该重新创建嵌入旧结构的结构 例子 package foo type Foo struct Field string func DoSomethi
  • Google Fit API 配额和限制

    使用 google fit api 时是否有配额和请求限制 我想使用 google fit api 我很好奇使用它时是否有限制 您可以在以下位置检查您项目的 Fitness API 当前限制谷歌开发者控制台 我检查了当前的项目 默认限制是
  • Python - SqlAlchemy:按大圆距离过滤查询?

    我正在使用 Python 和 Sqlalchemy 在 Sqlite 数据库中存储纬度和经度值 我创建了一个混合法对于我的位置对象 hybrid method def great circle distance self other Tri
  • 导入变量命名空间

    是否可以使用这样的变量导入名称空间 namespace User Authorization Certificate use namespace 显然这不会运行use声明需要一个常量 但有解决方法吗 Edit 发现了一个 gem 仅适用于
  • Liferay 7 主题中的 jQuery 插件

    我需要一些帮助来理解 Liferay 7 主题 特别是使用 jQuery 插件 因为我遇到了与此线程相同的问题 https web liferay com community forums message boards view messa
  • 由于嵌套节点依赖关系,路径太长

    我正在使用 npm 来安装依赖项 安装完这些后 我想与非技术人员共享我的项目 并且没有 npm 所以我想在应用程序内发送 node modules 但是 由于节点嵌套了依赖项 因此它创建的文件具有很长的路径 217 个字符 node mod
  • 为什么 iTextSharp 中的 GetTextFromPage 返回的字符串越来越长?

    我正在使用最新的iTextSharpnuGet 5 5 8 中的 lib 用于解析 pdf 文件中的一些文本 我面临的问题是GetTextFromPage方法不仅返回应有的页面文本 还返回上一页的文本 这是我的代码 var url http
  • 通过 C# 代码执行 Powershell 命令

    我想通过 C 代码添加 Powershell 命令或脚本 什么是正确的 变量声明 默认值存储在 C 变量中 例如 在 Powershell 中我输入以下行 user Admin 我想在 C 代码中添加这一行 powershell AddSc
  • 在 Ubuntu 20.04 上安装 MySQL 时出现问题

    我正在尝试在 Ubuntu 20 04 中安装 MySQL 8 0sudo apt install mysql server 但是重新安装和使用后仍然出现此错误sudo dpkg configure a Setting up mysql s
  • 如何为一个类实例化更多 CDI bean?

    Note 类似的问题已经在三年前被问过 在 EE 6 的时候 请参阅如何为一个类实例化多个 CDI Weld bean 有什么变化吗EE 7 在 Spring 中 可以通过在 xml conf 中定义相应的 bean 来实例化任何类 也可以
  • PhoneGap 启动图片 iOS Apple Store 提交 [重复]

    这个问题在这里已经有答案了 一如既往地提交iTunesConnect of my PhoneGap申请起来比较麻烦 特别是当我尝试使用时 我看到弹出这条新消息Application Loader Your binary is not opt
  • 面向对象编程。从方法内部调用方法

    如何从类内的函数调用类方法 我的代码是 var myExtension init function Call onPageLoad onPageLoad function Do something 我试过了 onPageLoad 来自 in
  • 如何在Vue Material中设置灵活的网格

    我正在尝试构建一个使用 Vue Material 在网格中渲染用户输入的卡片的界面 卡片正确渲染 然而 我希望我的网格能够以消除间隙的方式弯曲 对齐和交错不同尺寸的卡片 如下所示 下面的代码与上面的网格相对应
  • PHP:使用来自 php 的参数调用 javascript 函数

    我正在尝试使用 PHP 变量参数调用 JavaScript 函数 我尝试了两种方法 在 PHP 中使用 echo 中的脚本标签调用 JavaScript 函数 IE 将 PHP 变量值赋给 JavaScript 变量