将JavaScript变量传递给PHP的问题

时间:2013-12-19 23:40:57

标签: javascript php jquery

我在使用提交按钮将JS函数中的变量传递给另一个PHP文件时遇到问题。 我有一个预订表格,它使用JS计算总金额,我想将此总额发送到另一个名为“payment.php”的页面,我使用以下代码,但当重定向到payment.php时,购物车上没有任何更新 我希望在用户选择完东西后完成这项工作,然后按下结帐按钮,此按钮应该发送,但不能正常工作。 需要帮助

这是JS代码:

function payment(){
    var totalPrice = calTotal();
    document.getElementById("total").value= totalPrice;
    window.location.href = "payment.php?total=" + totalPrice; 
}

calTotal()是另一个正在进行计算的函数,它工作得很好。

以下是我收到的PHP页面上的代码:

<?php
$total = $_GET['total'];
echo $total;
?> 

我实际上正在尝试创建一个学校表单,只有一个表单,它在php页面上,用户选择了checkbbox,为此我使用了JS,因为用户检查它使用calTotal()加总总数在客户端,并使用.innerHTML函数显示它。我想要发生的是,我希望将这个变量发送到另一个php页面,比如payment.php。我希望这个变量在我的支付页面上也显示出来,但是它没有获取变量,我尝试了一些我认识的方法,并尝试了@cocco给出的建议,但都是徒劳的......需要帮助。

2 个答案:

答案 0 :(得分:1)

工作代码:

JS

YOURPAYMENTFORM.onsubmit=function(e){
 this.total.value=calTotal();
 this.submit();
 return false
}
// if you have only one form you can access it by document.forms[0]
// and so have document.forms[0].onsubmit=function(e){..

PHP

<?php
echo $_POST['total'];
?>

出了什么问题:

您正尝试post(提交)到某个页面,同时尝试使用get(window.location)访问另一个页面。

为什么?

当你在表单中有一个提交按钮时,它会尝试将整个表单发送到表单元素中的指定站点,但你需要先计算总价格。

即使您停止(返回false),用户也可以单击“输入”并执行相同操作。

这就是为什么我将函数(付款)直接添加到表单元素。


------------------------问题1

如果您的表单中有document.getElementById("total").value= totalPrice; 您的付款页面为payment.php,您可以在收到的PHP

中拨打$_POST['total']
<?php
$total = $_POST['total'];
echo $total;
?>

但在此之前,您需要使用其他按钮计算总金额。

------------------------问题2

通过在付款表单元素上添加onsubmit,您可以完全控制它

e.preventDefault()return false您可以停止发送信息 并转到"payment.php?total=" + totalPrice;页面。

YOURPAYMENTFORM.onsubmit=function(e){
 e.preventDefault();
 var totalPrice = calTotal();
 document.getElementById("total").value= totalPrice;
 window.location.href = "payment.php?total=" + totalPrice;
 return false
}

但在这种情况下,您不会发送任何帖子变量。

答案 1 :(得分:0)

如果payment是用于提交表单的事件处理程序,那么您可能需要在Event对象上调用preventDefault(),以防止浏览器提交表单并基本上覆盖重定向。或者,你可以在提交计算总数的表单中有一个隐藏字段,并在提交时设置它,并且它将与表单中的任何其他内容一起发布。

但是,作为参考,从渐进增强的角度来看,其中任何一个都是相当丑陋的。你基本上要求人们已经启用了JS,以便让东西看起来不会破碎。这个东西在服务器端更正确处理。 (特别是如果你将这个值用于任何重要的事情!你基本上是让客户决定你的东西花了多少钱。不要相信它;在服务器上做你自己的计算。)