【问题标题】:Jquery post to php file works but can only return some data when echoed in PHPJquery 发布到 php 文件有效,但只能在 PHP 中回显时返回一些数据
【发布时间】:2012-08-03 22:21:46
【问题描述】:

//用AJAX发送数据的Jquery代码

        $.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 是只是没有正确接收数据。

添加回显文件_get_contents("php://input");到 php 确实得到回显的所有内容,包括小计和数量,但只是执行 $_POST['subtotal'] 不会得到值。

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

【问题讨论】:

  • 这似乎是一种奇怪的数据格式化方式。您是否尝试过像这样格式化数据:data: { fname: fname, lname: lname, address: address, ... }

标签: php jquery post


【解决方案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中吗?

【讨论】:

  • 数组 ( [fname] => [amp;_lname] => [amp;_address] => [amp;_city] => [amp;_state] => AL [amp;_zip] = > [amp;_phone] => [amp;_useremail] => [amp;_subtotal] => 5 [amp;_quantity] => 1 ) 这是 print_r($_POST) 的回复;请记住,除了有问题的值之外,我没有填写表格中的任何数据。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2015-05-09
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多