【问题标题】:How to pass data from Javascript to PHP and vice versa? [duplicate]如何将数据从 Javascript 传递到 PHP,反之亦然? [复制]
【发布时间】:2010-09-29 05:03:39
【问题描述】:

如何通过 Javascript 脚本请求 PHP 页面并将数据传递给它?然后如何让 PHP 脚本将数据传回 Javascript 脚本?

client.js:

data = {tohex: 4919, sum: [1, 3, 5]};
// how would this script pass data to server.php and access the response?

server.php:

$tohex = ... ; // How would this be set to data.tohex?
$sum = ...; // How would this be set to data.sum?
// How would this be sent to client.js?
array(base_convert($tohex, 16), array_sum($sum))

【问题讨论】:

    标签: php javascript


    【解决方案1】:

    从 PHP 传递数据很容易,您可以用它生成 JavaScript。另一种方式有点困难 - 你必须通过 Javascript 请求调用 PHP 脚本。

    一个例子(为简单起见,使用传统的事件注册模型):

    <!-- headers etc. omitted -->
    <script>
    function callPHP(params) {
        var httpc = new XMLHttpRequest(); // simplified for clarity
        var url = "get_data.php";
        httpc.open("POST", url, true); // sending as POST
    
        httpc.onreadystatechange = function() { //Call a function when the state changes.
            if(httpc.readyState == 4 && httpc.status == 200) { // complete and no errors
                alert(httpc.responseText); // some processing here, or whatever you want to do with the response
            }
        };
        httpc.send(params);
    }
    </script>
    <a href="#" onclick="callPHP('lorem=ipsum&foo=bar')">call PHP script</a>
    <!-- rest of document omitted -->
    

    无论get_data.php 产生什么,都会出现在httpc.responseText 中。错误处理、事件注册和跨浏览器 XMLHttpRequest 兼容性留给读者做简单的练习;)

    更多示例请参见Mozilla's documentation

    【讨论】:

    • 值得注意的是,由于同源策略,它仅适用于相对 URL:en.wikipedia.org/wiki/Same-origin_policy
    • 不太对,它适用于同一个域,因此绝对 URL 也适用。如果目标 php 页面启用了CORS,它将跨域工作。如果不能选择 CORS,也可以使用 JSONP
    • 这不起作用。您现在正在设置一个禁止的标头(内容长度)。现在什么工作?
    • @traducerad:很确定这会自动发生,无需设置,很好。
    【解决方案2】:

    前几天我遇到了类似的问题。说,我想将数据从客户端传递到服务器并将数据写入日志文件。这是我的解决方案:

    我的简单客户端代码:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"   "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
       <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
       <title>Test Page</title>
       <script>
        function passVal(){
            var data = {
                fn: "filename",
                str: "this_is_a_dummy_test_string"
            };
    
            $.post("test.php", data);
        }
        passVal();
       </script>
    
    </head>
    <body>
    </body>
    </html>
    

    以及服务器端的php代码:

    <?php 
       $fn  = $_POST['fn'];
       $str = $_POST['str'];
       $file = fopen("/opt/lampp/htdocs/passVal/".$fn.".record","w");
       echo fwrite($file,$str);
       fclose($file);
    ?>
    

    希望这对您和未来的读者有用!

    【讨论】:

    • 我有以下错误。有人知道解决方案吗? (index):77 Uncaught ReferenceError: $ is not defined at passVal ((index):77) -for-> $.post("test.php", data); at (index):79 -for-> passVal();
    • 找到解决方案:添加
    • 我发现无法在php端接收POST内容。 php 和 javascript 应该在相同还是不同的文件中? (我都试过了。.record文件已形成,但里面没有内容)
    【解决方案3】:

    我会使用JSON 作为格式,使用 Ajax(实际上是 XMLHttpRequest)作为客户端->服务器机制。

    【讨论】:

      【解决方案4】:

      使用 cookie 是一种简单的方法。您可以使用 jquery 和插件作为 jquery.cookie 或创建自己的。 以 Jquery + jquery.cookie 为例

         <script>
         var php_value = '<?php echo $php_variable; ?>';
      
         var infobar_active = $.cookie('php_value');
         var infobar_alert  = any_process(infobar_active);
      
          //set a cookie to readit via php
         $.cookie('infobar_alerta', infobar_alerta );
      
         </script>
      
         <?php 
      
          var js_value = code to read a cookie
      
         ?>
      

      我发现这个有用的服务器端和混合框架: http://www.phplivex.com/ http://www.ashleyit.com/rs/

      我一直在使用 Ashley 的 RSJS Script 来更新 HTML 中的值而没有任何问题,直到我遇到了 JQuery(ajax、load 等)

      【讨论】:

        【解决方案5】:

        有几种方法,最突出的是获取表单数据或获取查询字符串。这是使用 JavaScript 的一种方法。当你点击一个链接时,它会调用 _vals('mytarget', 'theval') 来提交表单数据。当您的页面回发时,您可以检查是否已设置此表单数据,然后从表单值中检索它。

        <script language="javascript" type="text/javascript">
         function _vals(target, value){
           form1.all("target").value=target;
           form1.all("value").value=value;
           form1.submit();
         }
        </script>
        

        或者,您可以通过查询字符串获取它。 PHP 有您的 _GET 和 _SET 全局函数来实现这一点,使其变得更加容易。

        我确信可能还有更多更好的方法,但这些只是我想到的几个。

        编辑:根据其他人所说的使用上述方法,您将拥有一个锚标记,例如

        <a onclick="_vals('name', 'val')" href="#">My Link</a>
        

        然后在您的 PHP 中,您可以使用获取表单数据

        $val = $_POST['value'];
        

        因此,当您单击使用 JavaScript 的链接时,它将发布表单数据,当页面从该点击返回时,您可以从 PHP 中检索它。

        【讨论】:

          【解决方案6】:

          您可以将数据从 PHP 传递到 javascript,但从 javascript 获取数据到 PHP 的唯一方法是通过 AJAX。

          这样做的原因是您可以通过 PHP 构建一个有效的 javascript,但是要向 PHP 获取数据,您需要让 PHP 再次运行,并且由于 PHP 只运行以处理输出,您需要重新加载页面或异步查询。

          【讨论】:

          • 这不是真的,正如我刚刚展示的那样,我几乎每天都在工作中使用表单提交方法将数据从 JavaScript 获取到服务器端。
          • 使用页面重新加载或异步查询?
          【解决方案7】:

          另一种将数据从 php 交换到 javascript 或反之亦然的方法是使用 cookie,您可以将 cookie 保存在 php 中并由您的 javascript 读取,为此您不必使用表单或 ajax

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-30
            • 2020-10-18
            • 2010-12-27
            • 1970-01-01
            • 2018-06-20
            • 1970-01-01
            • 2013-08-16
            相关资源
            最近更新 更多