jQuery к PHP и обратно! - PullRequest
       1

jQuery к PHP и обратно!

1 голос
/ 10 августа 2010

Я хотел бы передавать содержимое назад и вперед из PHP в jQuery и наоборот. Я не уверен, полностью ли я понимаю, как это сделать, и надеюсь, что у меня будет лучший совет и разъяснения.

Ниже приведен пример того, что я пытаюсь сделать. PHP перечисляет файлы в каталоге (чей путь передается ему из jQuery), сохраняет их в массиве, а затем передает их обратно в jQuery. Я хотел бы использовать значения в этом массиве для различных целей, но на самом деле я просто хочу понять, как передавать информацию туда и обратно между ними, является ли она массивом или просто переменной. Merci Beaucoup!

PHP:

$files = array();
$dir = ($_POST['dir']);
$count = 0;

if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && strpos($file, '.jpg',1)) {$count++;
            $files[$file] = $file;
        }
    }
    closedir($handle);
}
    echo json_encode($files);
?>

JQuery:

$(document).ready(function(){

    $('a').click( function(e) {
        e.preventDefault();

        $.post("php.php", 'path/to/directory/',
            function(data) {
                alert(data);
        }, "json");
    });

});

Ответы [ 2 ]

4 голосов
/ 10 августа 2010

Если я правильно прочитал ваш вопрос, вы на самом деле не ищете подсказки по этому конкретному коду, а больше по поводу комментариев о процессе передачи данных между PHP и jQuery и обратно. Давайте кратко рассмотрим сам JSON, а затем рассмотрим каждую сторону сообщения.

JSON

JSON - это простой способ представления коллекций данных в строковом формате, который довольно легко читается как людьми, так и компьютерами. Вы можете получить полное описание на http://www.json.org/, но в основном сводится к:

  • данные заключены в { и } символы
  • данные имеют формат string : value, где string выступает в качестве эталонной метки
  • string в формате ", за которым следует любой символ Юникода, кроме / или ", за которым следует еще одна кавычка
  • value может быть другой строкой, числом, полным объектом данных, логическим значением или массивом некоторого набора вышеуказанных значений
  • массив имеет формат [, за которым следует разделенный запятыми список значений, за которым следует ]

PHP

На стороне php вы получаете запрос страницы и используете вложенные параметры, чтобы решить, как обрабатывать страницу. Для приложения JSON это означает загрузку данных в массив, а затем функция json_encode() выполняет основную работу по преобразованию этого массива в формат JSON. Остальная часть приложения будет работать точно так же, если вы вручную создадите JSON в виде строки, хотя, очевидно, это сделает для вас гораздо больше работы в коде PHP. Отсюда и вспомогательная функция:)

JQuery

На стороне jQuery вызов $.post() отправляет запрос AJAX, чтобы получить страницу с сервера. В этом случае вы отправляете запрос на php.php.

Второй набор параметров в вызове $.post() представляет собой набор параметров, который должен состоять из {, за которым следуют разделенные запятыми наборы: метка, затем двоеточие, затем значение. После того, как вы указали все параметры, закройте коллекцию с помощью }. Обратите внимание, что хотя это похоже на строку JSON, это не JSON. У метки нет кавычек, как того требует JSON. Однако любые строковые значения требуют кавычек.

Третий параметр вызова $.post() - это функция, которая будет автоматически применяться к данным, полученным из запроса страницы. Результаты функции автоматически загружаются в любую переменную, указанную вами в определении функции, и вы можете использовать эти данные внутри функции практически в любой момент. В вашем примере вы просто отправили данные в окно оповещения, но вы можете сделать с ним гораздо больше. Вы могли бы фактически проанализировать это как коллекцию JSON и выполнить различные действия на основе содержимого отдельных компонентов внутри JSON (что, в конечном счете, означает, что вы непосредственно воздействуете на отдельные значения из исходного массива php).

Четвертый параметр в вызове $.post() - это тип данных. Это не обязательно, однако его использование необходимо, если вы хотите получить доступ к коллекции json не только как к строке. С его помощью вы можете указать, что тип возвращаемых вами данных - json, просто включив "json". Если вы сделали это, вы можете получить доступ к элементам коллекции JSON непосредственно в функции третьего параметра, ссылаясь на их метку.

Вот пример полного вызова JSON $.post():

$.post("test.php", { "func": "getNameAndTime" },
   function(data){
     alert(data.name); //pretend it's John
     console.log(data.time); //pretend it's 10:05am
   }, "json");

Таким образом, здесь в ajax отправляется запрос ajax с параметром func="getNameAndTime", который php использует для определения того, что он должен вернуть json-закодированную коллекцию вида {"name":"John", "time":"10:05am"}, и затем ответ достигает функции сначала указывается в alert () со значением «John», а затем в журнале «10:05 am». Опять же, единственная причина, по которой data.name и data.time работают в этой функции, заключается в том, что мы указали, что json был типом возврата в четвертом параметре.

2 голосов
/ 10 августа 2010

Код правильный, за исключением этой строки в jQuery:

        $.post("php.php", {dir: 'path/to/directory/'},

Кстати, похоже, ваш запрос идемпотентен, поэтому рассмотрите возможность использования GET вместо POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...