【问题标题】:Javascript and PHP functionsJavascript 和 PHP 函数
【发布时间】:2010-09-18 07:05:27
【问题描述】:

是否可以使用 JavaScript 中的 onsubmit 从 PHP 中调用函数?如果是这样,有人可以给我一个如何完成的例子吗?

function addOrder(){
    $con = mysql_connect("localhost", "146687", "password");
    if(!$con){
        die('Could not connect: ' . mysql_error())
    }

    $sql = "INSERT INTO orders ((user, 1st row, 2nd row, 3rd row, 4th row)
    VALUES ($session->username,1st variable, 2nd variable, 3rd variable, 4th variable))";

    mysql_query($sql,$con)
    if(mysql_query($sql,$con)){
        echo "Your order has been added";
    }else{
        echo "There was an error adding your order to the databse: " . mysql_error();
    }
}

这就是我要调用的函数。它是一个订购系统,您输入您想要的每件商品的数量,点击提交,它应该将订单添加到表格中。

【问题讨论】:

  • 您要解决什么问题?你能详细说明一下吗?
  • 看起来你不知道这个客户端/服务器是如何工作的,php在服务器上运行,javascript在客户端,你无法直接进行调用,你会有要使用库,请参阅下面的 XAJAX 建议,这就是我使用的(没有比这更透明的了)。

标签: php javascript function


【解决方案1】:

您不能从 Javascript 调用 PHP 函数...

Javascript 是一种客户端语言(它在 Web 浏览器上执行,在接收到网页之后),而 PHP 在服务器端(它在网页呈现之前执行)。您无法拨打另一个电话。

...但是你可以得到外部 PHP 脚本的结果

有一个名为 xhttprequest 的 Javascript 函数允许您调用 Web 服务器上的任何脚本并得到它的答案。因此,为了解决您的问题,您可以创建一个输出一些文本(或 XML 或 JSON)的 PHP 脚本,然后调用它,然后使用 Javascript 分析答案。

这个过程就是我们所说的AJAX,用一个好的工具来做这件事要比你自己容易得多。看看JQuery,它功能强大且易于使用,内置 AJAX 帮助程序的 Javascript 库。

JQuery 示例(客户端):

$.ajax({
   type: "POST", // the request type. You most likely going to use POST
   url: "your_php_script.php", // the script path on the server side
   data: "name=John&location=Boston", // here you put you http param you want to be able to retrieve in $_POST 
   success: function(msg) {
     alert( "Data Saved: " + msg ); // what you do once the request is completed
   }

【讨论】:

    【解决方案2】:

    听起来你想要AJAX

    这是一个太大的话题,无法单独回答,但这应该能让你继续前进。

    基本上,Javascript 会将 HTTP 请求发送到您服务器上的 PHP 脚本,然后对响应执行一些操作。 JSON 可能也是您想了解的内容。

    【讨论】:

    • 这是一个过于笼统的答案,您至少应该给图书馆一些指导。我建议 XAJAX。
    【解决方案3】:

    间接可以使用 JavaScript 调用 PHP 函数。正如其他人已经提到的那样,您将要执行某种类型的请求 - 这不一定是 Ajax。它可以是同步的。在不确切知道您要完成什么的情况下,我的建议如下:

    • 将事件处理程序附加到表单的提交选项(如果您不打算使用 Ajax,则使用标准提交)
    • 将需要在 POST 或页面地址的查询字符串中传递给 PHP 函数的所有参数捆绑在一起。
    • 触发请求(异步或通过提交)
    • 在作为请求目标的 PHP 脚本中,从 $_POST 或 $_GET 中提取参数。
    • 带参数调用你需要的PHP函数。
    • 在请求完成后回显响应并根据需要对其进行解析。

    同样,这有点笼统,但您的问题也是如此。希望这能给出某种方向。

    【讨论】:

      【解决方案4】:

      您将获得的最接近的将是xajax,它可以让您将 PHP 函数包装到 AJAX 调用中。在开始使用 Zend Framework 之前,我已经使用了很多次,发现它很难以 OO 方式实现。

      使用 xajax,您可以编写一个 PHP 函数来执行所有常规逻辑,然后返回一个 ObjectResponse 对象,该对象通过 AJAX 操作浏览器(警报框、更改 HTML、CSS 等)。你用 xajax 注册你的函数,然后 xajax 会在你的 HTML 部分吐出一些 javascript。

      在您的 HTML 中,您只需调用 xajax 生成的 javascript 函数,然后它会通过 AJAX 处理其余部分。

      【讨论】:

        【解决方案5】:

        你会想要做这样的事情:

        <form action="add_order.php" method="POST" id="add_order_form">
        <!-- all of your form fields -->
        <input type='submit' value='Add Order'>
        </form>
        
        <script type="text/javascript">
        $("#add_order_form").submit(function() {
            var action = $("#add_order_form").attr("action");
            var data = $("#add_order_form").serialize();
            $.post(action, data, function(json, status) {
                if(status == 'success') {
                    alert(json.message);
                } else {
                    alert('Something went wrong.');
                }
            }, "json"); 
            return false;
        });
        </script>
        

        然后有一个名为 add_order.php 的 PHP 文件,内容如下:

        $success = 0;
        $con = mysql_connect("localhost", "146687", "password");
        if(!$con) {
            $message = 'Could not connect to the database.';
        } else {
            // SANITIZE DATA BEFORE INSERTING INTO DATABASE
            // LOOK INTO MYSQL_REAL_ESCAPE_STRING AT LEAST,
            // PREFERABLY INTO PREPARED STATEMENTS
            $query_ok = mysql_query("INSERT INTO `orders` ....");
            if($query_ok) {
                $success = 1;
                $message = "Order added.";
            } else {
                $message = "Unable to save information";
            }
        }
        
        print json_encode(array('success' => $success, 'message' => $message));
        

        要让这种美感发挥作用,您必须访问 jQuery 网站,下载它并包含 jquery.js 文件。

        我还没有测试过以上,但它应该可以工作。祝你好运。

        【讨论】:

          【解决方案6】:

          抱歉,您的问题太简单了。取决于 what 您想在 formsubmit Ajax 上调用的 PHP 函数对您没有帮助。您是否了解 PHP 和 JavaScript 之间的基本(客户端/服务器端)差异?

          【讨论】:

            【解决方案7】:

            是的,另一个学习 ajax 的简单易用的教程是:

            http://24ways.org/2005/easy-ajax-with-prototype/

            如果您的项目还没有走得太远并且需要恢复很多功能,我建议您使用原型。

            http://www.prototypejs.org/

            祝你好运!

            【讨论】:

              猜你喜欢
              • 2023-03-31
              • 2020-05-05
              • 2013-01-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-07-18
              • 1970-01-01
              相关资源
              最近更新 更多