Jquery发布到php文件可以工作,但只能在PHP中回显时返回一些数据


Jquery post to php file works but can only return some data when echoed in PHP

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