使用jQuery通过AJAX发送JSON到PHP

12
我试图使用jQuery AJAX将JSON发送到PHP文件中,基本上我想做的是获取一堆子元素的值和ID,然后将它们分配给一个JSON对象,再通过ajax发送该对象到PHP文件,然后处理并将其输入到数据库中。以下是我的代码:
Javascript/jQuery:
function test(){
    var selects = $('#systems_wrapper').find('.dropDowns');
    var newArray = new Array();

    selects.each(function(){
        var id = $(this).attr('id');
        var val = $(this).val();
        var o = { 'id': id, 'value': val };

        newArray.push(o);
    });

    $.ajax({
            type: "POST",
            url: "qwer.php",
            dataType: 'json',
            data: { json: newArray }
        });

}

PHP:

<?php
    $json = $_POST['json'];
    $person = json_decode($json);

    $file = fopen('test.txt','w+');
    fwrite($file, $person);
    fclose($file);

    echo 'success?';
?>

它创建了文件,但是文件是完全空白的,有任何想法是什么原因吗?

提前感谢!


1
在你的 <?php ?> 里面使用 print_r($_POST); 进行调试,以检查 JS 是否正常。在你的 $.ajax() 中不需要 dataType: 'json' - Z. Zlatev
我得到了一个数组,内容如下:Array ( [0] => stdClass Object ( [id] => mail_1 [value] => 150升眼镜蛇(G2) )[1] => stdClass Object ( [id] => mail_2 [value] => CPC1518 )),但我现在无法处理它。我能否像这样访问数组 $array[0]['id']? - Odyss3us
当我打印print_r($_POST)时,我得到了这个... 数组 ( [json] => [{"id":"mail_1","value":"150升眼镜蛇(G1)"},{"id":"mail_2","value":"200升眼镜蛇(G1)"}] ) - Odyss3us
你正在尝试将一个数组数据结构写入文本格式。 - Gutzofter
@Gutzofter,是的,我想到了,最终让它工作了,尽管那是一个愚蠢的错误,但还是谢谢大家的信息! :) - Odyss3us
5个回答

19
你可以尝试使用JSON.stringify()方法将你的数组自动转换为JSON。只需传递此输出即可。
data:  { json: JSON.stringify(newArray) }
希望这可以帮助到你。

@jish 刚刚完成了。新的最爱单词。比 flub 好。 - copilot0910

2

不要使用数组。
使用像这样的简单字符串:

var o = '[';
selects.each(function(){
    var id = $(this).attr('id');
    var val = $(this).val();
    o += '{ "id": "'+id+'", "value": "'+val+'" },';    
});
o = o.substring(0,o.length-1);
o += ']';

在Ajax中只需发送字符串'o'

        data: { json: newArray }

在php文件中,只需使用json_decode($json, true);
它将返回一个数组的数组,您可以通过foreach访问它
如果您想查看数组,请使用var_dump($person);


1

你应该在ajax POST中设置ContentType。我会使用contentType:"application/json";


1

你应该使用json_encode()而不是json_decode()!这样你将得到json字符串并能够写入它。


1

如果你要将它保存到文本文件中,就不需要使用json_decode。jQuery会将你的数组编码为JSON格式,PHP应该直接将该格式写入文本文件中。当你想以可用的方式打开该文件并访问其中的数据时,先将其内容读入变量,然后再运行json_decode()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接