За последние 24 часа нас посетили 17856 программистов и 1718 роботов. Сейчас ищут 888 программистов ...

Один интересный вопрос по jQuery

Тема в разделе "JavaScript и AJAX", создана пользователем mark2010, 30 дек 2010.

  1. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    Всем привет!

    Вот есть такой код:
    [js]
    function show()
    {
    $.ajax({
    url: "server-script.php",
    cache: false,
    success: function(data){
    alert(data);
    }
    });
    }

    $(document).ready(function(){
    show();
    });
    [/js]

    Соответственно есть скрипт server-script.php, суть которого примерно следующая: он коннектится к базе данных, запрашивает некоторую строку, а потом смотрит: если эта строка равна заданному значению, то в аяксе вываливается одно, если нет - другое. В коде это выглядит примерно так:
    PHP:
    1.  
    2. /* здесь некоторый код коннекта к  базе */
    3.  
    4. $q = mysql_query('SELECT test_str FROM test_ajax WHERE test_id = 2');
    5. $row = mysql_fetch_row($q);
    6.  
    7. if ($row[0] == 'test2')
    8. {  
    9.     echo 'Строка найдена';
    10. }
    11.  
    12. else
    13. {
    14.     echo 'Строка не найдена';
    15. }
    16.  
    Всё это прекрасно работает и выдаёт всё так, как надо. Понимаю, что это учебный пример, но то же самое понадобится в реальных проектах. Вопрос такой: как сделать сравнение не на стороне php а на стороне клиента? Т.е. в $row мы взяли некоторую строку, а потом требуется эту переменную $row передать в функцию, которая определена в ajax на событие success (function (data)), в ту самую переменную data. А уже на стороне JS посмотреть - если, к примеру data[0] равна x, то выдать x, если y, то выдать y.

    Всё это конечно очень абстрактно и условно но, думаю, меня поймут :)

    P. S. В mootools это реализовано приблизительно так: я передаю json-закодированную переменную в скрипт, эта переменная представляет собой массив. И в JS (mootools) уже известны все элементы этого массива. Т.е. если $action['test'] = 24 то var action['test'] тоже будет 24. Вот что-то подобного нужно добиться в jQuery.

    Всем заранее спасибо за помощь.
     
  2. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Код (Text):
    1.  function show()
    2.           {
    3.               $.ajax({
    4.                   dataType: 'json',
    5.                   url       : "server-script.php",
    6.                   cache  : false,
    7.                   type    : 'post',
    8.                   /*Тут то, что ты передаешь на сервер. В данном случае две независимые переменные*/
    9.                   data    : {
    10.                         id      : id,
    11.                         count   : count
    12.                   },
    13.                   success: function(data){
    14.                       alert(data);
    15.                   }
    16.               });
    17.           }
    18.        
    19.           $(document).ready(function(){
    20.               show();
    21.           });
     
  3. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    tommyangelo
    За это, конечно, спасибо. Но следующее:

    [js]
    function show()
    {
    $.ajax({
    dataType: 'json',
    url: "server-script.php",
    cache: false,
    success: function(data){
    alert(data.test_str);
    }
    });
    }

    $(document).ready(function(){
    show();
    });
    [/js]

    Код (Text):
    1.  
    2. $q = mysql_query('SELECT test_str FROM test_ajax');
    3.  
    4. $r = array();
    5. while ($data = mysql_fetch_array($q))
    6. {
    7.     $r[] = $data;
    8. }
    9.  
    10. echo json_encode($r);
    в итоге выдаёт undefined. Хотя print_r($r) выдаёт вот что:

    Код (Text):
    1.  
    2. Array
    3. (
    4.     [0] => Array
    5.         (
    6.             [0] => test
    7.             [test_str] => test
    8.         )
    9.  
    10.     [1] => Array
    11.         (
    12.             [0] => test1
    13.             [test_str] => test1
    14.         )
    15.  
    16.     [2] => Array
    17.         (
    18.             [0] => test2
    19.             [test_str] => test2
    20.         )
    21.  
    22.     [3] => Array
    23.         (
    24.             [0] => test4
    25.             [test_str] => test4
    26.         )
    27.  
    28. )
    Где правда?
     
  4. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    dataType: 'json'
    Это должен быть валидный json
     
  5. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    О, вроде разобрался, спасибо всем )))

    [js]
    success: function(data){
    if (data[0].test_str == 'test')
    {
    alert('Строка test');
    }
    else
    {
    alert('Другая строка');
    }
    }
    });
    [/js]
    вот так достигается то, что нужно :)
     
  6. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    mark2010
    И да - прислушайся к словам <?=RPG?>

    Отдавать надо через json_encode()