How do I encode JSON in PHP via jQuery Ajax post data?

前端 未结 5 796
南旧
南旧 2021-01-31 00:16

I have an HTML form and send data to php file when hitting submit button.

$.ajax({
    url: \"text.php\",
    type: \"POST\",
    data: {
        amount: amount,         


        
相关标签:
5条回答
  • 2021-01-31 00:55

    You cannot directly insert a JSON object to a dom. JSON object toString() method will always give u [object object], that is why you are getting this. You ve to parse the data by using JSON.stringify(data) or you have to run $.each(data,function(val){ $("#result").append(val) }).

    0 讨论(0)
  • 2021-01-31 01:10

    Code example with 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>
    

    text.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);
        }
    ?>
    
    0 讨论(0)
  • 2021-01-31 01:10

    Your object is most likely being passed properly. It's the way you're capturing the result that returns [object object] as @Spudley explained. The console doesn't know how to display the construct but you can display specific attributes using the object.attribute syntax. Use console.log() on the JS side or the code below for a prettified output.

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

    From How can I pretty-print JSON in (unix) shell script?

    Also Temporarily remove dataType on the ajax handler if you sense there's a bug somewhere. Getting the ouput to show on a GET request should do. Change this back to POST for any operation that modifies something like a database delete or alter.

    Lastly, modify the header as shown in @GroovyCarrot's answer. If you're using Chrome the extra whitespace seems to be a bug: Tab and pre wrapped around JSON output in Chrome

    0 讨论(0)
  • 2021-01-31 01:13

    Try adding

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

    At the top of your PHP script and see what you get back

    Hope that helps!

    Edit: Forgot to mention you should access your values like so: data.amount

    0 讨论(0)
  • 2021-01-31 01:19

    You're converting resulting object to string instead of displaying it.

    Instead of result, if you want print object inside some wrapper, you can do something like this:

    var text = '{';
    
    for(var i in data) {
      var value = data[i];
    
      text += '"'+i+'":"'+value+'", ';
    }
    
    text += '}';
    
    $('#result').text(text);
    

    But you may consider that console.log is much easier and faster way to see the response in json format.

    0 讨论(0)
提交回复
热议问题