Jquery load () и PHP переменные - PullRequest
       24

Jquery load () и PHP переменные

7 голосов
/ 12 декабря 2011

Если я загружаю страницу PHP с помощью Jquery .load (file.php), может ли включенный файл использовать переменные php, которые были определены на странице, которая вызвала load ()?

Ответы [ 6 ]

15 голосов
/ 12 декабря 2011

Нет, вам нужно передать переменные, которые вы хотите использовать, в file.php:

$('#yourdiv').load('file.php?var1=xyz&var2=xyz&var3=xyz');

И затем вы можете получить их в вашем файле file.php:

$var1 = $_GET['var1'];
$var2 = $_GET['var2'];
$var3 = $_GET['var3'];

Если переменных много, используйте метод POST:

$('#yourdiv').load('file.php', {var1:x, var2:y, var3:z})

, а затем получите переменные в file.php:

$var1 = $_POST['var1'];
$var2 = $_POST['var2'];
$var3 = $_POST['var3'];
13 голосов
/ 13 декабря 2011

Вы неправильно понимаете, как все работает.

  • PHP запускается до того, как любой ответ браузера выдается клиенту, и весь код выполняется на сервере . Переменные, объявленные в вашем PHP-файле, уничтожаются после запуска всего PHP-кода; они "исчезают".
  • JavaScript запускается после ответа браузера, и весь код запускается на клиенте . «Загрузив» результат вывода файла PHP, вы не получите никакого доступа к переменным PHP, только к выводу.

Если вы хотите перенести определенные переменные из PHP в JavaScript, вы можете вывести часть вывода в JSON в вашем PHP-скрипте, например, так:

<?PHP
    header("Content-Type: application/json");

    $myVariable = "hello world";

    echo json_encode(array(array("myVariable" => $myVariable)));

    /* Output looks like this:
       [
           {
               "myVariable": "hello world"
           }
       ]
    */
?>

Ваш JavaScript / JSON должен выглядеть примерно так:

$.getJSON("test.php", function(result) {
    console.log(result[0].myVariable);
});

Имеет ли это смысл?

5 голосов
/ 12 декабря 2011

Да, используйте параметр данных, см. http://api.jquery.com/load/:

$('#someelement').load(
    "test.php", 
    {
        'key1': '<?php echo $value1; ?>',
        'key2': '<?php echo $value2; ?>'
    } 
);

Параметры публикуются в файле test.php и доступны как:

$_POST['key1']
$_POST['key2']
0 голосов
/ 29 декабря 2012

Второй аргумент (params) функции загрузки JQuery должен быть объектом или функцией обратного вызова, но также может быть пустой строкой.В зависимости от этого, load отправляет сообщения post или get.

У меня была идея автоматически переключаться между get и post (например, если cookie-файл установлен), потому что get более быстр и способен кешировать, а post -больше сохранения.

Писать функцию загрузки, включая содержимое внутри функции обратного вызова, хуже, чем писать что-то подобное:

//get
var url="cache_dir/my_bag.html";
var params="";
if(document.cookie){
  //post
  url="post.php";
  params="{my:bag}";
  }
$(selector).load(url,params,function(){
...

  });
0 голосов
/ 12 декабря 2011

Вы должны передать эти переменные в загруженный файл PHP через функцию .load.

Пример:

$("#objectID").load("test.php", { 'choices[]': ["{$choice1}", "{$choice2}"] } );

Переменные, определенные в текущем файле PHP, станут частью Javascript, который загружает новый файл PHP.

0 голосов
/ 12 декабря 2011
Область видимости

переменных в скрипте PHP, загруженном JavaScript, отличается от страницы, которая загрузила скрипт PHP, поэтому ответ - нет.

, но вы можете определить глобальные переменные или использовать суперглобальные переменные, такие как ($_GET, $_POST и т. д.), чтобы получить то, что вы хотите.

...