Jquery .post()返回数组

时间:2011-03-21 09:02:51

标签: php jquery arrays json .post

对不好的标题感到抱歉,但我不知道如何命名。我的问题是每当我从选择框中传递一个值时,我都会触发此jquery事件以检查复选框。我讨厌回复$ res [];在selecctedgr.php。我需要使用json吗?我该怎么做?

网主页:

$("#group_name").change(function(){
    var groupname = $("#group_name").val();
    var selectedGroup = 'gr_name='+ groupname;
    $.post("selectedgr.php", {data: selectedGroup}, function(data){
        $.each(data, function(){
            $("#" + this).attr("checked","checked");
        });
    },"json");


});

PHP(selectedgr.php):

<?php
    include_once '../include/lib.php';
    $gr_name=mysql_real_escape_string($_POST['gr_name']);

    $sqlgr = "SELECT * FROM PRIVILLAGE WHERE MAINGR_ID=".$gr_name;
    $resultgr = sql($sqlgr);
    while($rowgr = mysql_fetch_array($resultgr)){
        $res[] = $rowgr['ACT_ID'];
    }

    echo $res[];
?>

4 个答案:

答案 0 :(得分:9)

将PHP示例中的最后一行(echo $res[];)更改为:

echo json_encode($res);

json_encode()手册页会告诉您更多信息。

同样@Unicron说你需要在将$ gr_name变量传递给SQL语句之前验证它。

您可以使用:

if(isset($_POST['gr_name'])) {
    $gr_name = mysql_real_escape_string($_POST['gr_name']);
}

有关PHP手册中的更多信息,请参阅:http://php.net/manual/en/function.mysql-real-escape-string.php

答案 1 :(得分:6)

您可以使用json_encode函数将任意数据转换为JSON。假设您要返回一个字符串数组,以下是使用json_encode的方法:

<?php
    include_once '../include/lib.php';
    $res = array(); // initialize variables
    $sqlgr = sprintf("
        SELECT ACT_ID
        FROM PRIVILLAGE
        WHERE MAINGR_ID=%d
        ",
        $_POST['gr_name']
    ); // only select those columns that you need
       // and do not trust user input
    $resultgr = sql($sqlgr);
    while($rowgr = mysql_fetch_array($resultgr)){
        $res[] = $rowgr['ACT_ID'];
    }
    echo json_encode($res); // use json_encode to convert the PHP array into a JSON object
                            // this will output something like ['foo', 'bar', 'blah', 'baz'] as a string
?>

在客户端,您可以使用jQuery.post method,如下所示:

<script type="text/javascript">
$("#group_name").change(function () {
    $.post("selectedgr.php", {
        gr_name: $(this).val()
    }, function (data) {
        // console.log(data);
        // jQuery will convert the string "['foo', 'bar', 'blah', 'baz']" into a JavaScript object
        // (an array in this case) and pass as the first parameter
        for(var i = 0; i < data.length; i++) {
            $("#" + data[i]).attr("checked", "checked");
        }
    }, "json");
});
</script>

答案 2 :(得分:1)

如果您想使用JSON,请使用echo json_encode($res); 但是,如果你的代码现在正在运行,我真的不明白你会得到什么,因为你仍然需要在Javascript中进行一些处理才能处理结果。

答案 3 :(得分:0)

我发现我的主要问题如下

而不是(之前):

 $.post("selectedgr.php", {data: selectedGroup}, function(data){

这样做(之后):

$.post("selectedgr.php", selectedGroup, function(data){

原谅我的坏。啊,伙计们,关于mysql上的转义实际上#group_name不是任何输入字段而是选择框。感谢每一条评论,建议和指导。

埃里克。