ajax - 将数据作为json发送到php服务器并接收响应

时间:2016-01-05 20:19:55

标签: javascript php jquery json ajax

我试图抓住比我想要的更多的东西。

假设我有2个输入和一个按钮,按下按钮我想创建一个包含这些输入数据的json并将其发送到服务器。

我认为应该这样做,但我可能错了,因为我已经看到很多不同的(解释不清楚)做类似事情的方法。

    var Item = function(First, Second) {
        return {
            FirstPart : First.val(), 
            SecondPart : Second.val(), 
        };
    };

    $(document).ready(function(){
        $("#send_item").click(function() {
            var form = $("#add_item");

            if (form) {
                item = Item($("#first"), $("#second"));

                $.ajax ({
                    type: "POST",
                    url: "post.php", 
                    data: { 'test' : item },
                    success: function(result) {
                        console.log(result);
                    }
                });
            }
        });
    });

在PHP中我有

class ClientData
{
    public $First;
    public $Second;

    public function __construct($F, $S)
    {
        $this->First = F;
        $this->Second = S;
    }
}

if (isset($_POST['test']))
{
    // do stuff, get an object of type ClientData
}

问题是$ _POST [' test']似乎是一个数组(如果我将它传递给json_decode我得到一个错误,说它是一个数组,如果我使用foreach迭代它我得到我希望看到的价值观)。 那个ajax调用是否正确?我还应该在PHP位中做些什么吗?

4 个答案:

答案 0 :(得分:1)

您应指定json的内容类型,并使用JSON.stringify()格式化数据有效内容。

myDataRef.limitToLast(10).on("child_added", function(snapshot) {
 var newImg = snapshot.child("url");
  console.log(newImg);
});

答案 1 :(得分:1)

发送AJAX请求时,您需要发送有效的JSON。您可以发送一个数组,但在将数据发送到服务器之前需要使用表格有效的JSON。因此,在您的JavaScript代码中形成有效的JSON并将该数据发送到您的端点。

在您的情况下,test键包含value,其中包含具有两个属性的JavaScript对象。 JSON是键值以字符串格式编码,您的PHP脚本不是如何处理JavaScript(jQuery)对象。

https://jsfiddle.net/s1hkkws1/15/

这应该有所帮助。

答案 2 :(得分:0)

用于发送原始form数据:
js部分:

$.ajax ({
    type: "POST",
    url: "post.php", 
    data: item ,
    success: function(result) {
        console.log(result);
    }
});

php部分:

..
if (isset($_POST['FirstPart']) && isset($_POST['SecondPart']))
{
    $fpart = $_POST['FirstPart'];
    $spart = $_POST['SecondPart'];
    $obj = new ClientData($fpart, $spart);
}
...

发送json字符串:
js部分:

$.ajax ({
    type: "POST",
    url: "post.php", 
    data: {'test': JSON.stringify(item)},
    success: function(result) {
        console.log(result);
    }
});

php部分:

..

if (isset($_POST['test']))
{
    $json_data = $_POST['test'];
    $json_arr = json_decode($json_data, true);
    $fpart = $json_arr['FirstPart'];
    $spart = $json_arr['SecondPart'];
    $obj = new ClientData($fpart, $spart);
}
...

答案 3 :(得分:-1)

尝试发送ajax:

data: { 'test': JSON.stringify(item) },

代替:

data: { 'test' : item },