【问题标题】:How to call a PHP class method from a JavaScript function [duplicate]如何从 JavaScript 函数调用 PHP 类方法 [重复]
【发布时间】:2012-02-10 00:48:29
【问题描述】:

可能重复:
Call php function from javascript

我知道 php 是服务器端,JavaScript 是客户端。但是我想知道在调用 JavaScript 函数时如何运行 PHP 方法。下面是我的代码,我知道错误是,但是我该如何执行 php 方法?

 <script type="text/javascript">
            function toggle()
            {
                var ele = document.getElementById("addCatTextBox");
                var text = document.getElementById("addCatButtonText");
                if(ele.style.display == "block") {
                        ele.style.display = "block";
                    text.innerHTML = "Save category";
                    <?php Category::addCategory($inCatName)?>
                }
                else {
                    ele.style.display = "none";
                    text.innerHTML = "Add new category";
                }
            } 
    </script>

感谢您的帮助。

【问题讨论】:

  • 布莱恩打败了我。 ajax 调用将允许这样做。
  • php函数的结果是什么,你想用它做什么?
  • 该函数不会返回任何内容。它将执行一条 SQL 语句 "INSERT INTO Categories (catName) VALUES ('".$inCatName."')";
  • 如何对这个方法进行ajax调用?

标签: php javascript


【解决方案1】:

使用原型库 (www.prototypejs.org):

Javascript:

<script type="text/javascript">
  function toggle()
  {
      var ele = document.getElementById("addCatTextBox");
      var text = document.getElementById("addCatButtonText");
      if(ele.style.display == "block") {
              ele.style.display = "block";
          text.innerHTML = "Save category";

          var options={
            method: 'get',
            parameters: 'inCatName='+ele.value,
            onSuccess: function(xhr) {
                // TODO: Whatever needs to happen on success
                alert('it worked');
            },
            onFailure: function(xhr) {
                // TODO: Whatever needs to happen on failure
                alert('it failed');
            }
          };

          new Ajax.Request('addCategory.php', options);

      }
      else {
          ele.style.display = "none";
          text.innerHTML = "Add new category";
      }
  } 
</script>

addCategory.php:

<?php

$inCatName=isset($_REQUEST["inCatName"]) ? $_REQUEST["inCatName"] : null;

Category::addCategory($inCatName);

?>

这个想法是 Javascript 向幕后的 addCategory.php 页面发送一个 GET(或者它可以是 POST)请求,将创建类别所需的任何信息传递给它。

希望这足以让您继续前进。我的代码中缺少很多东西——您需要验证 addCategory.php 接收的变量并执行任何其他相关的安全检查,然后再让它靠近数据库。 addCategory.php 还需要任何包含文件等,以便它了解您的 Category 类。最后,addCategory.php 应该真正将某种形式的变量返回给调用它的 Javascript 代码,以便它知道结果是什么。

【讨论】:

  • 哇,帮了大忙。仍在努力理解它。我已经在上面实现了您的代码并添加了包含但它没有提醒任何东西。有什么原因吗?
  • 首先,Javascript 真的可以运行 Ajax 代码吗?粘贴警报('test');就在“var options”行之前。
  • 我已将您所有的 Ajax 编码切换到 else 部分,因为它应该在显示的文本框中有一个值。我在 var 选项上方和下方放置了一个警报,它们都显示了,但是当我在新的 Ajax 部分之后放置一个时,它不会走那么远。
  • 可能是一个 javascript 错误妨碍了我们。如果您使用的是 IE(颤抖),在状态栏上是否有一个可以点击的黄色小三角警告?如果您使用的是 Safari 或 Chrome 等 WebKit 浏览器,请启动 Web Inspector 并查看控制台选项卡(您可能需要刷新页面并再次单击按钮才能看到任何内容)。
  • Uncaught ReferenceError: Ajax is not defined
【解决方案2】:

这可能会有所帮助。使用 ajax 调用您的 php 文件(示例中使用了categories.php)。发送一个名为“function”的参数并将其设置为“addCategory”。在您的 php 文件中编写代码以检测是否设置了 $_GET['function'] 并检测它是否设置为“addCategory”。如果是,让代码调用该函数。我还看到您试图将 $inCatName 参数传递给 php 函数。要发送此内容,只需将其添加到下面的网址中即可。

<script type="text/javascript">
        function toggle()
        {
            var ele = document.getElementById("addCatTextBox");
            var text = document.getElementById("addCatButtonText");
            if(ele.style.display == "block") {
                    ele.style.display = "block";
                text.innerHTML = "Save category";
                var xmlhttp;
                if (window.XMLHttpRequest) {
                    xmlhttp=new XMLHttpRequest();
                } else {
                    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                xmlhttp.open("GET","categories.php?function=addCategory",true);
                xmlhttp.send();
            }
            else {
                ele.style.display = "none";
                text.innerHTML = "Add new category";
            }
        } 
</script>

【讨论】:

  • 此方法假定您没有使用任何额外的 javascript 库。
【解决方案3】:

您可以对触发 PHP 的端点使用 Ajax 请求,然后执行Category::addCategory($inCatName)

使用 Jquery:

$.ajax({
  url: "addCategory.php",
  context: document.body,
  success: function(){
    // whatever you need to do
  }
});

【讨论】:

  • 假设未使用基于 OP 的代码示例的 jQuery。
  • 是的,这只是一个例子,我不知道他在用什么。
  • 这是一个骗人的问题,我已经链接了使用纯 javascript 的答案。
猜你喜欢
  • 1970-01-01
  • 2013-04-19
  • 2020-06-10
  • 1970-01-01
  • 2017-05-10
  • 2012-11-29
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
相关资源
最近更新 更多