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

标签 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 对象,所以我不知道为什么我会收到此错误。在“网络”控制台中我可以看到它成功发送了 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 帖子来解决我的错误,但到目前为止,我还没有遇到任何从 ajax 发送 json 对象并从 php 接收 json 对象的帖子。另外,我想知道 isset($_POST) 如何适合这种代码场景,因为我发送的是 json 对象而不是常规表单数据。

最佳答案

尝试将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);
   }

关于php - 无法将 json 从客户端发送到 php 并接收来自 php 的 json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33977287/

相关文章:

php - 访问 Woocommerce 3 中的运费元数据

php - 将 ID 从一个表发布到另一个表

javascript - 如何检查并提醒是否有重复项插入到我的表中?

javascript - 尝试了解如何使用 parseFloat 将字符串转换为数字

json - vue 组件 : pages/index. 中未定义渲染函数或模板

php - 未从 SELECT 查询中获得预期结果

php - 表单停止提交到数据库

jquery - 使用 JQuery 制作动画

javascript - 如何将值从 JSON API 放入 Angular 模板指令

python - 自定义Python JSON object_hook