Jquery .post () возвращает массив - PullRequest
2 голосов
/ 21 марта 2011

Извините за плохой заголовок, но я не знаю, как назвать это.Моя проблема в том, что всякий раз, когда я передаю значение из поля выбора, я запускаю это событие jquery, чтобы установить флажки.В основном я повторяю $ res [];at 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 ]

9 голосов
/ 21 марта 2011

Измените последнюю строку в вашем примере 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']);
}

См .: http://php.net/manual/en/function.mysql-real-escape-string.php для получения дополнительной информациив руководстве по PHP.

6 голосов
/ 21 марта 2011

Вы можете использовать функцию 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 , например:

<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>
1 голос
/ 21 марта 2011

Если вы хотите использовать JSON, просто используйте echo json_encode($res); Но я не совсем понимаю, что вы получите, если ваш код работает сейчас, так как вам все равно придется выполнить некоторую обработку в Javascript для обработки результата.

0 голосов
/ 21 марта 2011

Я нашел свою главную проблему, как показано ниже

вместо (до):

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

сделать это (после):

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

Простите меня за плохое.Ага, ребята, в отношении экранирования на mysql на самом деле #group_name - это не любое поле ввода, а поле выбора.Ценю за каждый комментарий, предложение и руководство.

Эрик.

...