Как получить доступ к массиву PHP из JS "в другом файле"?

58
4

Я видел этот ответ (и еще пару других), и он обеспечивает понятный способ доступа к массиву PHP. Но в этом примере PHP и JavaScript находятся в одном файле.

Тем не менее, я не могу написать Javascript в своем PHP файле по некоторым причинам, и то, что я предпочитаю, вызывает использование JS в другом файле. Поэтому мне нужно получить доступ к массиву из PHP в JS файле. Как я могу это сделать?

Я предпочитаю его без AJAX (если возможно), потому что я еще не начал изучать AJAX.

спросил(а) 2014-08-10T02:07:00+04:00 6 лет, 2 месяца назад
1
Решение
58

Вы можете использовать подход JSONP:

Сделайте свой PHP файл для вывода ваших данных, завернутых в вызов функции, примерно так:

callback(
['your', 'data', 'here']
);

Чтобы сделать это с помощью переменной PHP, вы можете сделать это:

callback(<?php echo json_encode($data) ?>);

Затем в вашем файле JavaScript сделайте следующее:

function callback(data) {
alert( data.join(' ') ); // will alert 'your data here'
}

В ваш файл HTML просто включите вышеприведенный JS файл, а затем добавьте еще один тег скрипта, который указывает на ваш php файл:

<script src="/path/to/local.js"></script>
<script src="http://yourserver.com/path/to/server.php"></script>

Браузер захватит первый файл и оценит объявление функции. Затем он захватит второй файл и увидит, что это вызов функции и сразу же выполняет вашу функцию с данными в качестве аргумента.

ответил(а) 2014-08-10T02:14:00+04:00 6 лет, 2 месяца назад
58

Быстрое и грязное решение было бы сделать ваш файл JavaScript файлом PHP и передать все необходимые вам переменные, включая скрипт:

<script type="text/javascript" language="javascript" src="./script.php?var=<?php print(json_encode($var)); ?>"></script>

В файле JavaScript вы можете использовать переменные PHP следующим образом:

var a=JSON.parse(<?php print($_REQUEST['var']); ?>);

ответил(а) 2014-08-10T02:41:00+04:00 6 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема