1

我正在尝试创建一个在您单击“新消息”按钮时打开的消息传递系统。我正在使用 HTML、PHP 和 javascript。

我有一个按钮设置了一个容器来附加一个文本区域。我正在使用 javascript DOM 执行此操作。这部分我没有问题,它试图在 javascript 中获取 PHP。

所以假设我有一个变量:

<?php $my_name = "Eric" ?>

我可以在javascript中调用它吗?如果没有,还有其他方法可以解决这个问题吗?

这是我的完整代码:

HTML:

<html>
<head>
    <link type="text/css" rel="stylesheet" href="message.css"/>
    <script type="text/javascript" src="js/message.js"></script>
</head>

<body>
    <div id="container"></div>

    <button id="new_message" onclick="createMessage()">New Message</button> 
</body>
</html>

CSS:

#container {
    position: absolute;
    height: 443px;
    width: 743px;
    border: 1px solid black;
    border-radius: 0 0 20px 0;
    margin-top: 100px;
}

Javascript:

function createMessage() {
    var form = document.createElement("form");
    form.name = "form_input";
    form.method = "POST";
    form.action = "messages.php";
    container.appendChild(form);

    var textarea = document.createElement("textarea");
    textarea.name = "message_input";
    textarea.cols = 84; 
    textarea.rows = 16; 
    textarea.id = "message_input"; 
    container.appendChild(textarea);
};

我正在尝试做一些类似于 Facebook 的事情,当您单击消息按钮时,会出现一个弹出框,其中包含 php。

这可以像我用 javascript 做的那样完成,还是我必须使用其他东西?

谢谢你的帮助!

4

4 回答 4

1

考虑这一点的最佳方法是回到页面中使用的不同脚本语言的执行顺序。执行顺序是这样的:

(1) PHP 在您的服务器上运行。它吐出一堆 HTML 和/或 Javascript 和/或 CSS,作为对用户浏览器的响应发送。

(2) 用户的浏览器接收响应,呈现 HTML,并执行 Javascript。

实际上,这意味着您可以使您的Javascript依赖于您的PHP,但不能反过来。

从您的问题来看,您似乎可以始终执行 PHP 并在用户单击按钮时简单地显示结果。所以让你的 PHP 像这样吐出一些 Javascript:

<script type="text/javascript">
    var myName = '<?php echo addslashes($my_name)?>';
</script>

[注意:您可能需要进行额外的或不同的消毒。]

于 2013-09-04T22:45:36.203 回答
0

我假设您真正的问题是“我如何在 PHP 中获取数据并将该数据的副本提供给 Javascript”。

您可以采取两种主要方法:

  1. 让您的 Javascript 在触发时尝试通过 AJAX 调用从服务器获取信息。那将是一个单独的 PHP 脚本,并且 JS 必须传递某种 ID 或其他信息来帮助您确定它需要什么。
    • 需要单独的 PHP 脚本和额外的管道。
    • 数据量大时效果更好
    • 当有很多这些按钮并且用户不会使用那么多按钮时会更好
    • 为后来更高级的东西奠定了基础
  2. 将信息嵌入到 HTML 中,并让 Javascript 将其读出。
    • 更容易做
    • 页面更大
    • 一旦你开始做很多事情,可能会成为一个问题
    • 即使在使用 AJAX 之后,您也可能需要稍微执行此操作,以传递 ID 和其他内容。

我建议您暂时尝试“快速而肮脏”的方式,只是为了感受一下。例如,在您的 PHP 页面中:

<?php
/* ... */
$defaultMessage = "Hello world! Watch me contain single quotes (') and double quotes(\") and other things!";
/* ... */
?>
<button id="new_message" onclick="createMessage(<?= htmlentities(json_encode($defaultMessage))?>">New Message</button>

我不是 100% 确定转义,但在数据中使用单引号和双引号进行测试以确保没有出错,并记住您需要以一种方式转义它以避免破坏 HTML,并再次以另一种方式避免破坏javascript。然后在你的 JS 文件中:

function createMessage(defaultMessage) {
    // ...
    textarea.value = defaultMessage;
    // ...
}

通过这种方式,您将来自 PHP 的数据放入 HTML 输出,然后(在 PHP 脚本停止运行之后)用户的浏览器获取 HTML,并且可以出于任何需要的目的将该数据拉回。

于 2013-09-04T22:48:49.240 回答
0

通过按钮将变量传递给javascript是有意义的。例如。

<button id="new_message" onclick="createMessage('<?php echo $my_name;?>')">New Message</button>
于 2013-09-04T22:43:12.820 回答
0

PHP在服务器端执行,而javascript在客户端运行。要在 javascript 和 php 之间传递变量或任何其他数据,您需要通过ajax 请求调用您的服务器,或者(对于静态数据)将数据放入您的页面源以使用 javascript 处理它。无论如何,您需要在服务器端转换数据以允许处理。例如,创建一个 interface.php 文件,其中包含如下内容:

<?php
  $mydata = array("username"=>"john");
  echo "window.serverdata=".json_encode($mydata).";";
?>

然后将其包含在您的页面中:

<script type="text/javascript" src="interface.php"></script>
...
<script type="text/javascript">
  alert(serverdata.username);
</script>

请注意,ajax 请求是事实上的标准,因为您不想每隔几秒钟重新加载一次页面。如果您想交换静态数据,上述方法可能很有用。

于 2013-09-04T22:55:16.093 回答