5

是否可以使用onsubmitJavaScript 从 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();
    }
}

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

4

7 回答 7

20

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

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

...但您可以获得外部 PHP 脚本的结果

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

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

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
   }
于 2008-10-21T12:25:50.283 回答
4

听起来你想要AJAX

对于一个单一的答案来说,这个话题太大了,但这应该能让你继续前进。

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

于 2008-10-21T10:32:26.687 回答
4

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

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

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

于 2008-10-21T12:03:15.240 回答
2

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

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

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

于 2008-10-21T12:03:30.687 回答
2

您将需要执行以下操作:

<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>

然后有一个 PHP 文件命名为add_order.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 文件。

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

于 2008-10-21T14:02:13.787 回答
0

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

于 2008-10-21T11:48:17.987 回答
-1

是的,另一个学习 ajax 的伟大而简单的教程是:

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

如果您的项目还没有走得太远并且需要恢复很多功能,那么我推荐的另一件事是原型。

http://www.prototypejs.org/

祝你好运!

于 2008-10-21T10:47:17.360 回答