【问题标题】:export variable in JavaScript [duplicate]JavaScript中的导出变量[重复]
【发布时间】:2012-03-21 06:04:51
【问题描述】:

可能重复:
Access a JavaScript variable from PHP

我有一个返回我的地理位置(纬度、经度)的 JS 代码,我想在 PHP 代码中重用这些信息。我的网页有 .php 扩展名,我设置了全局变量,但它不起作用。 我该怎么做?

<script type="text/javascript"> 
    function getCoordPosition(){
        if(navigator.geolocation){
            navigator.geolocation.getCurrentPosition(function(position){
                latitude = position.coords.latitude;
                longitude = position.coords.longitude;
            });
        }
    }
</script>

<?php
    echo 'Latitude is $latitude';
?>

【问题讨论】:

  • 解决这个问题的唯一方法是使用 AJAX 调用 - 这是 JS 与 PHP 通信的唯一方式。
  • @BurningtheCodeigniter:不,还有很多其他解决方案。通信通常是双向的,因此从 PHP 向 JS 发送数据就像使用 PHP 生成 JS 代码一样简单。在另一个方向上,您还有其他解决方案可以将数据从 JS 发送到 PHP,例如使用修改的 GET 参数重新加载窗口、添加指向 PHP 脚本的图像/框架/脚本等。说“AJAX 调用 - 这是唯一的JS 如何与 PHP 通信的方式”是完全不正确的。

标签: php javascript variables


【解决方案1】:

你不能把两者结合起来; Javascript 在浏览器中执行,PHP 在服务器上执行(甚至在页面到达浏览器之前)。如果您想将 Javascript 结果传送到您的服务器,您应该使用表单提交它,或者使用 AJAX 进行异步请求。

【讨论】:

    【解决方案2】:

    您的 PHP 代码首先由服务器处理,然后发送到查看器。然后执行 JavaScript 代码,因此 PHP 无法知道 JavaScript 在做什么,因为它是在 JavaScript 之前处理的。您可以使用 AJAX 将 JavaScript 信息传递给 PHP 脚本,然后从中获取一些内容,但这实际上取决于您要如何处理所有这些内容。

    【讨论】:

    • 我想将这些数据发送到我的服务器(带有用户名和其他内容)并将它们存储在数据库中。我会尝试一个 AJAX 调用来做到这一点。 Tx 澄清 JS 和 PHP 的特殊性。
    【解决方案3】:

    其中一种方法来自 $_GET 方法

    var test1 = "myvalue";
    var link = "thispage.php";
    
    window.location = link+"?test1="+test1;
    

    然后从testpage.php读取值

    另一种方法是 $.get,或者 $.post 请求到一个 php 页面。

    $.post("mypage.php", {
       myvar : "myvalue",
       "myanothervar" : "myanothervalue"
    }, function(data) {
       //data contains the output from the script
    });
    

    【讨论】:

      【解决方案4】:

      我认为问题在于您将客户端代码 (javascript) 与服务器端代码 (php) 混合在一起。由于客户端运行时还不存在,服务器上的 php 在运行时无法访问来自客户端的信息。客户端必须将其提交回服务器以供使用。

      php 代码执行并将响应发送到客户端。然后客户端页面从页面顶部到底部执行。那时服务器不知道客户端上发生了什么。您可以加载客户端页面,然后使用 jQuery 向 php 进行服务器端调用 (AJAX) 以将信息传递给它。

      类似的东西(我对 jQuery 有点生疏)

      $.get('myurl/sendgeolocation', { lat : lattitude, long : longitude }, function (data) {});

      然后你会希望服务器在函数(数据)回调中做它需要做的任何事情,以根据需要更新屏幕或其他任何事情。

      【讨论】:

        【解决方案5】:

        这正是您所期望的答案

        //index.php

        <html>
        <head>
        <script type="text/javascript" src="jquery.min.js"></script>
        <script type="text/javascript"> 
                function getCoordPosition()
                {
                        if(navigator.geolocation)
                        {
                        navigator.geolocation.getCurrentPosition(function(position){
                                                                            latitude = position.coords.latitude;
                                                                            longitude = position.coords.longitude;
                                                                            obj ={};
                                                                            obj.latitude = position.coords.latitude;
                                                                            obj.longitude= position.coords.longitude;
                                                                            //latlngvalue = $.get('index.php',obj,"html");
                                                                            $.ajax({
                                                                               url:'fetch.php',
                                                                               data:obj,
                                                                               dataType:'html',
                                                                               success:function(obj){
                                                                                   latlng = obj.split('-');
        
                                                                                   $('#latlng').html("Latitude : "+latlng[0]+"| Longitude :"+latlng[1]);
                                                                               }
                                                                            });
        
                                                                            });
                        }
                }
        </script>
        </head>
        <body>
        <div id="latlng"></div>
        <button onclick="getCoordPosition()" >Get Geocode</button>
        </body>
        </html>
        

        //fetch.php

        <?php
        if(isset($_GET['latitude']) && isset($_GET['longitude'])):
            echo $_GET['latitude'].'-'.$_GET['longitude'];
        endif;
        
        ?>
        

        【讨论】:

        • 能否只发布相关代码?
        • @Starx 是的,你是对的,我会在下一篇文章中这样做
        猜你喜欢
        • 2013-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多