如何在同一页面内将值从 Js 传递到 PHP [重复]

Posted

技术标签:

【中文标题】如何在同一页面内将值从 Js 传递到 PHP [重复]【英文标题】:how to pass a value from Js to PHP within the same page [duplicate] 【发布时间】:2021-12-26 18:34:30 【问题描述】:

我有一个画布,我已经在那里画了我的圆圈(来自 mysql DB 的中心和半径)。 此外,在某些情况下(来自 DB),圆圈会被填充为红色。

现在我必须这样做:

当用户点击红色圆圈时,我应该显示一个弹出窗口(我想是警报),其中包含从 MySQL 获取的数据

我已经能够使用 javascript 定位用户单击的像素的坐标,并且我能够获取该像素的颜色。

我需要的是:

如果像素是红色的,我应该将该信息传递给 php(同一页面),然后我应该从 DB 中获取一些数据。

我在网上找到了很多功能,Ajax 或 JQuery,但我真的无法集成到我的 PHP...

我的相关代码如下:

//这个Js函数获取用户点击的像素的坐标和颜色

<script language="javascript">
    function getCursorPosition(canvas, event) 
        const rect = canvas.getBoundingClientRect();
        const x = event.clientX - rect.left;
        const y = event.clientY - rect.top;
        //console.log("x: " + x + " y: " + y);
        
        var ctx = canvas.getContext("2d");
        ctx.beginPath();
        
        var pixel = ctx.getImageData(x, y, 1, 1).data; 
        var hex = "#" + ("000000" + rgbToHex(pixel[0], pixel[1], pixel[2])).slice(-6);
        
        alert("x: " + x + " y: " + y + " hex: " + hex);
    
</script>

...

//绘制画布并监听事件mousedown

<?php
    echo("<div id='text' style='text-align:center;'>");
    echo("<canvas id='myCanvas' width='400' height='600' style='border:1px solid #000000;'></canvas>");
?>
    <script>
        var canvas = document.getElementById('myCanvas'); 
        canvas.addEventListener("mousedown", function (e)  getCursorPosition(canvas, e););
    </script>
<?php
    echo("</div>"); 
    

...

//循环从DB获取中心和半径并在画布上绘制圆

$sqltextval = "SELECT * FROM table WHERE col='somevalue'";
$connval = mysqli_query($id,$sqltextval);
if ($rowval = mysqli_fetch_object($connval))

    //fill circle in red
    echo("<script type='text/javascript'>");
    echo("fill_circle($X, $Y, $radius);");
    echo("</script>;");
 
else

    //circle not filled in
    echo("<script type='text/javascript'>");
    echo("draw_circle($X, $Y, $radius);");
    echo("</script>;"); 

【问题讨论】:

由于 JS 在客户端和 PHP 服务器端运行,因此您需要向服务器发出 AJAX 请求,在 PHP 中处理该请求,然后将响应发送回并使用 JS 响应。 您上面的所有代码都用于画布生成,但问题在于服务器/客户端通信。您对客户端/服务器通信进行了哪些尝试?如果它不尝试解决您发布的问题,那么您要使用的代码是无关紧要的。 "我在网上找到了很多函数,Ajax 或 JQuery,但我真的无法集成到我的 PHP 中" - 这是正确的做法,所以告诉我们你尝试了什么,你在哪里卡住了,发生了什么...... 【参考方案1】:

我建议你试试fetch

const componentToHex = c => 
  let hex = c.toString(16);
  return hex.length == 1 ? "0" + hex : hex
;
const rgbToHex = (r, g, b) => "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);


function getCursorPosition(canvas, event) 
  const rect = canvas.getBoundingClientRect();
  const x = event.clientX - rect.left;
  const y = event.clientY - rect.top;
  //console.log("x: " + x + " y: " + y);

  var ctx = canvas.getContext("2d");
  ctx.beginPath();

  var pixel = ctx.getImageData(x, y, 1, 1).data;
  var hex = "#" + ("000000" + rgbToHex(pixel[0], pixel[1], pixel[2])).slice(-6);

  return "x: " + x + " y: " + y + " hex: " + hex;


var canvas = document.getElementById('myCanvas');
canvas.addEventListener("mousedown", function(e) 
  const pos = getCursorPosition(canvas, e);
  console.log(pos); 
  // uncomment next line to send to server
  // fetch('server.php?' + new URLSearchParams( pos: pos ))
);
<div id='text' style='text-align:center;'>
  <canvas id='myCanvas' width='400' height='600' style='border:1px solid #000000;'></canvas>
</div>

【讨论】:

谢谢@mplungjan! 我会尽快尝试,但是“server.php”是什么? 你的服务器进程 - 你选择它的名字 嗯,好的,谢谢,那么它是包含此代码的 php 文件的名称对吗? 它有效!!!!惊人的!!!非常感谢大家!

以上是关于如何在同一页面内将值从 Js 传递到 PHP [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从一个php页面传递到另一个? [复制]

PHP - 使用$ _SESSION [duplicate]将值从一个页面传递到另一个页面的数组

如何将值从 ajax 传递到 portlet 页面

如何将值从页面传递到 Blazor 中的布局?

如何在反应js中调用或将值从一个js文件传递到另一个文件

通过使用 java 脚本,我如何将值从一个 html 页面传递到另一个 html 页面? [复制]