//Jquery代码,用于使用AJAX发送数据
$.ajax({
type: "POST",
url: "test.php",
data:
"fname="+ fname +
"& lname="+ lname +
"& address="+ address +
"& city="+ city +
"& state="+ state +
"& zip="+ zip +
"& phone="+ phone +
"& useremail="+ useremail +
//the following values are not being receieved by the php correctly
"& subtotal="+ subTotal +
"& quantity="+ quantity,
success: function(){
$('#oderBtn').hide(function({$('#orderTest').fadeOut();});
}
});
用于接收 AJAX 数据的 PHP 代码
$fname = htmlspecialchars(trim($_POST['fname']));
$lname = htmlspecialchars(trim($_POST['lname']));
$city = htmlspecialchars(trim($_POST['city']));
$state = htmlspecialchars(trim($_POST['state']));
$zip = htmlspecialchars(trim($_POST['zip']));
$address = htmlspecialchars(trim($_POST['address']));
$email = htmlspecialchars(trim($_POST['useremail']));
//these do not post correctly, i do not know why
$subTotal = htmlspecialchars(trim($_POST['subtotal']));
$quantity = htmlspecialchars(trim($_POST['quantity']));
所以问题是 fname、lname、城市、州、邮政编码、地址和电子邮件都在工作,但小计和数量不起作用,firebug 以相同的方式将它们全部发布,似乎 PHP 只是没有正确接收数据。
在 php 中添加 echo file_get_contents("php://input"); 确实会得到回显的所有内容,包括小计和数量,但只做 $_POST['小计'] 不会得到这个值。
感谢您在这件事上的任何帮助。
首先,你不需要构建这样的字符串。您可以简单地传递一个对象文字:
$.ajax({
type: "POST",
url: "test.php",
data: {
fname: fname,
lname: lname
...
},
success: function(){
$('#oderBtn').hide(function({$('#orderTest').fadeOut();});
}
});
jQuery将根据需要对其进行序列化。我认为令人印象深刻的是,它完全尊重您的 POST 请求,因为您正在向它传递查询字符串。
此外,它看起来很可疑,它在电子邮件后停止工作。 您可以将print_r($_POST);
的结果粘贴到 PHP 中吗?
您是否尝试过使用 $_GET[]
而不是 $_POST[]
?这将是我要尝试的第一件事,因为$_GET
是为从URL获取数据而设计的,而$_POST
则更多地是为从表单提交获取传入的数据而设计的。
$fname = htmlspecialchars(trim($_GET['fname']));
$lname = htmlspecialchars(trim($_GET['lname']));
$city = htmlspecialchars(trim($_GET['city']));
$state = htmlspecialchars(trim($_GET['state']));
$zip = htmlspecialchars(trim($_GET['zip']));
$address = htmlspecialchars(trim($_GET['address']));
$email = htmlspecialchars(trim($_GET['useremail']));
$subTotal = htmlspecialchars(trim($_GET['subtotal']));
$quantity = htmlspecialchars(trim($_GET['quantity']));
此输出作为 JSON 数组的示例:
$data = array(
'fname' => htmlspecialchars(trim($_GET['fname']));
'lname' => htmlspecialchars(trim($_GET['lname']));
'city' => htmlspecialchars(trim($_GET['city']));
'state' => htmlspecialchars(trim($_GET['state']));
'zip' => htmlspecialchars(trim($_GET['zip']));
'address' => htmlspecialchars(trim($_GET['address']));
'email' => htmlspecialchars(trim($_GET['useremail']));
'subTotal' => htmlspecialchars(trim($_GET['subtotal']));
'quantity' => htmlspecialchars(trim($_GET['quantity']));
);
echo json_encode($data);
编辑:
您可能还需要在 jQuery 中使用 encodeURI()
,以确保没有 & 符号或其他字符弄乱 URL 字符串。
$.ajax({
type: "GET",
url: "test.php",
data: encodeURI(
"?fname=" + fname +
"&lname=" + lname +
"&address=" + address +
"&city=" + city +
"&state=" + state +
"&zip=" + zip +
"&phone=" + phone +
"&useremail=" + useremail +
"&subtotal=" + subTotal +
"&quantity=" + quantity
),
success: function(response){
alert(response); // Will show the JSON array
$('#oderBtn').hide(function({$('#orderTest').fadeOut();});
}
});
小提琴:http://jsfiddle.net/xNSLX/