12

我有一个 HTML 表单,并在点击提交按钮时将数据发送到 php 文件。

$.ajax({
    url: "text.php",
    type: "POST",
    data: {
        amount: amount,
        firstName: firstName,
        lastName: lastName,
        email: email
    },
    dataType: "JSON",
    success: function (data) {
        console.log("ok");
        $("#result").text(data);
    }
});

在 PHP 中:

<?php
    $amount      = $_POST["amount"];
    $firstName   = $_POST["firstName"];
    $lastName    = $_POST["lastName"];
    $email       = $_POST["email"];
    if(isset($amount)){
        $data = array(
            "amount"     => $amount,
            "firstName"  => $firstName,
            "lastName"   => $lastName,
            "email"      => $email
        );
        echo json_encode($data);
    }
?>

结果是 [object object]。我想要这样的类型:

{"Amount":"12.34", "FirstName":"Any", "LastName":"Tester", "Email":"a.test@something.com"}

我做错了什么?

4

5 回答 5

21

JSON.stringify 的代码示例:

<html>
    <head>
       <title>jQuery Test</title>
       <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
       <script type="text/javascript">
           $(document).ready(function() {
               $("#submit").click(function(){
                   $.ajax({
                       url: "text.php",
                       type: "POST",
                       data: {
                           amount: $("#amount").val(),
                           firstName: $("#firstName").val(),
                           lastName: $("#lastName").val(),
                           email: $("#email").val()
                       },
                       dataType: "JSON",
                       success: function (jsonStr) {
                           $("#result").text(JSON.stringify(jsonStr));
                       }
                   });
               });
           });
       </script>
    </head>

    <body>
        <div id="result"></div>
        <form name="contact" id="contact" method="post">
            Amount: <input type="text" name="amount" id="amount"/><br/>
            firstName: <input type="text" name="firstName" id="firstName"/><br/>
            lastName: <input type="text" name="lastName" id="lastName"/><br/>
            email: <input type="text" name="email" id="email"/><br/>
            <input type="button" value="Get It!" name="submit" id="submit"/>
        </form>
    </body>
</html>

文本.php

<?php
    $amount      = $_POST["amount"];
    $firstName   = $_POST["firstName"];
    $lastName    = $_POST["lastName"];
    $email       = $_POST["email"];
    if(isset($amount)){
        $data = array(
            "amount"     => $amount,
            "firstName"  => $firstName,
            "lastName"   => $lastName,
            "email"      => $email
        );
        echo json_encode($data);
    }
?>
于 2013-10-15T12:58:09.930 回答
4

您的对象很可能已正确传递。[object object]正如@Spudley 解释的那样,这是您捕获返回结果的方式。控制台不知道如何显示构造,但您可以使用object.attribute语法显示特定属性。console.log()在 JS 端或下面的代码中使用美化输出。

// Indent with tabs
// Data is the parameter sent to the success function in the ajax handler
JSON.stringify( data , null, '\t');

来自如何在(unix)shell 脚本中漂亮地打印 JSON?

dataType如果您感觉到某处存在错误,也可以暂时删除ajax 处理程序。让输出显示在 GET 请求上应该可以。对于修改数据库删除或更改之类的任何操作,将其更改回 POST。

最后,修改标题,如@GroovyCarrot 的答案所示。如果您使用的是 Chrome,额外的空格似乎是一个错误:Tab and prewrapped around JSON output in Chrome

于 2013-10-15T12:30:15.103 回答
3

尝试添加

header('Content-type: application/json');

在你的 PHP 脚本的顶部,看看你得到了什么

希望有帮助!

编辑:忘了提你应该像这样访问你的值:data.amount

于 2013-10-15T12:30:29.200 回答
1

您不能直接将 JSON 对象插入 dom。JSON对象toString()方法总是会给你[对象对象],这就是你得到这个的原因。您必须通过使用来解析数据, JSON.stringify(data)否则您必须运行$.each(data,function(val){ $("#result").append(val) }).

于 2013-10-15T12:34:53.267 回答
0

您正在将结果对象转换为字符串而不是显示它。

如果您想在某个包装器中打印对象,而不是结果,您可以执行以下操作:

var text = '{';

for(var i in data) {
  var value = data[i];

  text += '"'+i+'":"'+value+'", ';
}

text += '}';

$('#result').text(text);

但是您可能会认为这console.log是以 json 格式查看响应的更简单快捷的方式。

于 2013-10-15T12:32:38.350 回答