0

//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、city、state、zip、address 和 email 都可以工作但小计和数量都不起作用,firebug 让它们都以相同的方式发布,似乎 PHP 只是没有收到数据正确。

添加 echo file_get_contents("php://input"); 到 php 确实得到了发送回的所有内容,包括小计和数量,但只是做 $_POST['subtotal'] 不会得到价值。

感谢您在此问题上提供的任何帮助。

4

2 回答 2

1

好吧,首先,您不需要构建这样的字符串。您可以简单地传递一个对象文字:

    $.ajax({
        type: "POST",
        url: "test.php",
        data: {
            fname: fname,
            lname: lname
            ...
        },
        success: function(){
        $('#oderBtn').hide(function({$('#orderTest').fadeOut();});
        }
    });

并且 jQuery 将根据需要对其进行序列化。我认为令人印象深刻的是,它完全尊重您的 POST 请求,因为您向它传递了一个查询字符串。

此外,它看起来很可疑,它在发送电子邮件后停止工作。你可以将结果粘贴到print_r($_POST);PHP 中吗?

于 2012-08-06T22:40:41.330 回答
0

您是否尝试过使用$_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);

编辑:

您可能还需要encodeURI()在 jQuery 中使用以确保没有与号或其他字符混淆 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/

于 2012-08-06T22:37:30.047 回答