我不断收到此致命错误:无法将stdClass类型的对象用作数组

时间:2019-06-19 13:35:56

标签: php html json ajax

通过javascript和php之间的这种简单通信,我一直在撞墙。

我有一个HTML表单,要求用户输入两个数字。它应该将这两个数字作为JSON发送到服务器(process.php)。在服务器中,它应将两个数字相加并将结果发送回JavaScript。之后,它将结果打印在HTML文件上。

javascript.js

$(document).ready(function(){
    $('#calcular').click (function(e){
        e.preventDefault();
        var numerosJSON = JSON.stringify($('#myForm').serializeArray());
        $.ajax({
            url: '/process.php',
            type:'post',
            data: numerosJSON,
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            contentType: 'application/json',
            success: function(soma){
                                //shows result in a div in the html file
                $('#out').text(soma);
            }
        });
    });
})

process.php

$json = file_get_contents('php://input');
$numeros = json_decode($json, true);

$fst = $_POST['first'];
$snd = $_POST['second'];

$soma = $fst + $snd;

header('Content-Type: application/json, charset=utf-8');

echo json_encode($soma);

它确实发送了请求,但我总是收到错误消息:

  

致命错误:不能将stdClass类型的对象用作数组

你们能帮我这个忙吗?这让我发疯了!

1 个答案:

答案 0 :(得分:0)

在发布的PHP代码中,对接收到的JSON对象进行解码,但不使用它,而是尝试从$_POST中检索值。解码对象后,每个序列化输入将具有一个包含namevalue子级的数组元素。如果要按名称访问这些元素,则需要通过array_map()或while / for循环遍历接收和解码的数组。为简单起见,我在示例中使用了按数组索引访问。

<?php
$json = file_get_contents('php://input');
$numeros = json_decode($json, TRUE);

$fst = $numeros[0]["value"];
$snd = $numeros[1]["value"];
$soma = $fst + $snd;

header('Content-Type: application/json, charset=utf-8');
echo json_encode($soma);