无法将json从客户端发送到php并从php接收json响应

时间:2015-11-28 22:43:37

标签: php jquery json ajax

我使用ajax post从jquery发送json对象,我想使用php解析它并将相同的对象发回。这个帖子很成功,所以我的目标是去那里,但我没有得到适当的回应。我从html表单发送名字和姓氏,但我得到的响应json对象是我的控制台: -

response : [object Object]

当我试图在浏览器中看到php端时,我得到的错误如下: -

<br />
<b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\jsonTest\process.php</b> on line <b>8</b><br />
<br />
<b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\jsonTest\process.php</b> on line <b>9</b><br />
{"firstname":null,"lastname":null}

我在stackoverflow上看过关于上述错误的帖子,但场景与我的不同。我确实从jquery端发送json对象所以我不知道为什么我甚至得到这个错误。在&#34;网络&#34; console我可以看到它成功发送了json对象。

这是我的jquery部分: -

$("#userDataForm").submit(function(e){
    e.preventDefault();
    var formData={
        fname:$("#fname").val(),
        lname:$("#lname").val()
    };
    $.ajax({
        type:'post',
        url:'process.php',
        dataType:'json',
        data:JSON.stringify(formData),
        contentType: "application/json",

        success:function(response){
            var response= $.trim(response);
            console.log("response : "+response);
        }
    });
});

这是我正在使用的html表单:

<form id="userDataForm">
        <input type="text" placeholder="Firstname" name="fname" id="fname" />
        <input type="text" placeholder="Lastname" name="lname" id="lname" />
        <input type="submit" value="submit" name="submit">
    </form>

这是php部分: -

<?php
    header('Content-type:application/json');
   $request = file_get_contents('php://input');
   $input=json_decode($request);
    $jsonResponse=array(
                'firstname' => $input->fname,
                'lastname'  => $input->lname
                );

    echo json_encode($jsonResponse);

?>

我已经通过几个stackoverflow帖子为我的错误,但到目前为止,我还没有能够遇到任何帖子,其中json对象从ajax发送,也从php收到。此外,我想知道isset($ _ POST)将如何适应代码的这种情况,因为我发送json对象而不是常规表单数据。

2 个答案:

答案 0 :(得分:1)

尝试将ajax数据部分更改为:

data: {
   data: JSON.stringify(formData)
},

并在php中接收请求:

$request = $_POST['data'];

编辑:完整测试代码

HTML:

<form id="userDataForm">
    <input type="text" placeholder="Firstname" name="fname" id="fname" />
    <input type="text" placeholder="Lastname" name="lname" id="lname" />
    <input type="submit" value="submit" name="submit">
</form>

JS:

  $('#userDataForm').submit(function(e){
         e.preventDefault();
         var formData={
            fname:$('#fname').val(),
            lname:$('#lname').val()
         };
         jQuery.ajax({
            type: 'POST',
            url: 'process.php',
            dataType: 'json',
            data: {
               data: JSON.stringify(formData)
            },
            success: function(res) {
               alert(res);
            }
         });
      });

PHP:

  if (isset($_POST['data'])) {
      $request = $_POST['data'];
      $input = json_decode($request);
      $jsonResponse = array(
            'firstname' => $input->fname,
            'lastname'  => $input->lname
      );
      echo json_encode($jsonResponse);
   }

答案 1 :(得分:1)

您可以这样做:(tested

<强> HTML

<form id="userDataForm">
    <input type="text" placeholder="Firstname" name="fname" id="fname" />
    <input type="text" placeholder="Lastname" name="lname" id="lname" />
    <input type="submit" value="submit" name="submit">
</form>

<强>的jQuery

    $(document).ready(function(){
        $("#userDataForm").submit(function(e){
            e.preventDefault();
            var formData={
                fname:$("#fname").val(),
                lname:$("#lname").val()
            };
            $.ajax({
                type:'post',
                url:'process.php',
                dataType:'json',
                data:JSON.stringify(formData),
                contentType: "application/json",

                success:function(response){ 
                    // process json object
                    console.log(response.fname);
                    console.log(response.lname);
                },
                error: function(jqXHR, textStatus, errorThrown){
                    alert(errorThrown);
                }
            });
        });
    });

<强> process.php

<?php

    $json_array = json_decode(file_get_contents("php://input"), true);
    $my_array = array();
    foreach($json_array as $key => $value){
        $my_array[$key] = $value;
    }
    echo json_encode($my_array);

?>

因为在您的情况下,您正在正文中提交JSON,所以您必须从此流中读取它。 $_POST超全球的常用方法在这里不起作用。

引用PHP手册:

  

php:// input是一个只读流,允许您从请求正文中读取原始数据。