如何将数据从 Javascript 传递到 PHP,反之亦然?

IT技术 php javascript
2021-02-03 20:57:53

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

客户端.js:

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

服务器.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))
6个回答

从 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 的文档以获取更多示例

值得注意的是,由于同源策略,它仅适用于相对 URL:en.wikipedia.org/wiki/Same-origin_policy
2021-03-23 20:57:53
这不起作用。您现在正在设置一个禁止的标题(内容长度)。现在做什么工作?
2021-03-26 20:57:53
不太正确,它适用于相同的域,因此绝对 URL 也适用。如果目标 php 页面启用了CORS,它将跨域工作另外JSONP可如果CORS是不是一种选择。
2021-04-04 20:57:53
@traducerad:现在可以肯定这会自动发生,无需设置,很好。
2021-04-10 20:57:53

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

我的简单客户端代码:

<!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);
?>

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

找到解决方案:添加 <script src= ajax.googleapis.com ... 行
2021-03-19 20:57:53
我有以下错误。有谁知道解决方案?(index):77 Uncaught ReferenceError: $ is not defined at passVal ((index):77) -for-> $.post("test.php", data); at (index):79 -for-> passVal();
2021-03-24 20:57:53
我发现无法在 php 端接收 POST 内容。php 和 javascript 应该在同一个文件中还是不同的文件中?(我都试过了。.record文件已形成但其中没有内容)
2021-04-01 20:57:53

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

使用 cookie 是一种简单的方法。您可以使用jQuery和pluging作为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 脚本来更新 HTML 中的值而没有任何问题,直到我遇到了 JQuery(ajax、load 等)

有几种方法,最突出的是获取表单数据,或获取查询字符串。这是使用 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 中检索它。