Как мне передать, что сценарий Javascript запрашивает страницу PHP и передает ей данные? Как мне затем заставить PHP-скрипт передавать данные обратно в Javascript-скрипт?
client.js:
data = {tohex: 4919, sum: [1, 3, 5]};
// how would this script pass data to server.php and access the response?
server.php:
$tohex = ... ; // How would this be set to data.tohex?
$sum = ...; // How would this be set to data.sum?
// How would this be sent to client.js?
array(base_convert($tohex, 16), array_sum($sum))






Вы можете передавать данные из PHP в javascript, но единственный способ получить данные из javascript в PHP - через AJAX.
Причина этого в том, что вы можете создать действительный javascript через PHP, но для получения данных в PHP вам нужно будет снова запустить PHP, а поскольку PHP запускается только для обработки вывода, вам потребуется перезагрузка страницы или асинхронный запрос.
С перезагрузкой страницы или асинхронным запросом?
Есть несколько способов, самые известные из которых - получение данных формы или строки запроса. Вот один из методов с использованием JavaScript. Когда вы нажимаете на ссылку, она вызывает _val ('mytarget', 'theval'), который отправляет данные формы. Когда ваша страница отправляется обратно, вы можете проверить, установлены ли эти данные формы, а затем извлечь их из значений формы.
<script language = "javascript" type = "text/javascript">
function _vals(target, value){
form1.all("target").value=target;
form1.all("value").value=value;
form1.submit();
}
</script>
В качестве альтернативы вы можете получить его через строку запроса. В PHP есть глобальные функции _GET и _SET, которые значительно упрощают задачу.
Я уверен, что есть другие методы, которые лучше, но это лишь некоторые из них, которые приходят на ум.
Обновлено: Основываясь на том, что другие сказали, используя вышеуказанный метод, у вас будет тег привязки, например
<a onclick = "_vals('name', 'val')" href = "#">My Link</a>
А затем в вашем PHP вы можете получить данные формы, используя
$val = $_POST['value'];
Поэтому, когда вы нажимаете ссылку, которая использует JavaScript, она отправляет данные формы, и когда страница отправляется обратно с этого щелчка, вы можете затем получить их из PHP.
Передавать данные из PHP легко, с его помощью можно сгенерировать JavaScript. Другой способ немного сложнее - вам нужно вызвать скрипт PHP с помощью запроса Javascript.
Пример (с использованием традиционной модели регистрации событий для простоты):
<!-- headers etc. omitted -->
<script>
function callPHP(params) {
var httpc = new XMLHttpRequest(); // simplified for clarity
var url = "get_data.php";
httpc.open("POST", url, true); // sending as POST
httpc.onreadystatechange = function() { //Call a function when the state changes.
if (httpc.readyState == 4 && httpc.status == 200) { // complete and no errors
alert(httpc.responseText); // some processing here, or whatever you want to do with the response
}
};
httpc.send(params);
}
</script>
<a href = "#" onclick = "callPHP('lorem=ipsum&foo=bar')">call PHP script</a>
<!-- rest of document omitted -->
Все, что производит get_data.php, будет отображаться в httpc.responseText. Обработка ошибок, регистрация событий и кроссбраузерная совместимость с XMLHttpRequest оставлены читателю в виде простых упражнений;)
См. Также Документация Mozilla для дальнейших примеров.
Стоит отметить, что он работает только с относительными URL-адресами из-за политики одинакового происхождения: en.wikipedia.org/wiki/Same-origin_policy
Не совсем верно, он работает с тем же доменом, поэтому абсолютные URL-адреса тоже работают. Он будет работать в междоменном режиме, если на целевой php-странице включен CORS. Также JSONP доступен, если CORS не является вариантом.
Это не работает. В настоящее время вы устанавливаете запрещенный заголовок (длина содержимого). Что работает сейчас?
@traducerad: Я уверен, что теперь это происходит автоматически, и нет необходимости настраивать его, хороший улов.
Я бы использовал JSON в качестве формата и Ajax (на самом деле XMLHttpRequest) в качестве механизма клиент-> сервер.
другой способ обмена данными с php на javascript или наоборот - использование файлов cookie, вы можете сохранять файлы cookie на php и читать их с помощью javascript, для этого вам не нужно использовать формы или ajax
Использование файлов cookie - простой способ. Вы можете использовать jquery и плагин как jquery.cookie или создать свой собственный. Пример использования Jquery + jquery.cookie
<script>
var php_value = '<?php echo $php_variable; ?>';
var infobar_active = $.cookie('php_value');
var infobar_alert = any_process(infobar_active);
//set a cookie to readit via php
$.cookie('infobar_alerta', infobar_alerta );
</script>
<?php
var js_value = code to read a cookie
?>
Я нашел полезные серверные и гибридные фреймворки: http://www.phplivex.com/http://www.ashleyit.com/rs/
Я использовал сценарий RSJS Эшли для обновления значений в HTML без каких-либо проблем в течение долгого времени, пока не встретил JQuery (ajax, load и т. д.)
На днях я столкнулся с подобной проблемой. Скажем, я хочу передать данные со стороны клиента на сервер и записать данные в файл журнала. Вот мое решение:
Мой простой код на стороне клиента:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" />
<script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type = "text/javascript"></script>
<title>Test Page</title>
<script>
function passVal(){
var data = {
fn: "filename",
str: "this_is_a_dummy_test_string"
};
$.post("test.php", data);
}
passVal();
</script>
</head>
<body>
</body>
</html>
И код php на стороне сервера:
<?php
$fn = $_POST['fn'];
$str = $_POST['str'];
$file = fopen("/opt/lampp/htdocs/passVal/".$fn.".record","w");
echo fwrite($file,$str);
fclose($file);
?>
Надеюсь, это сработает для вас и будущих читателей!
У меня следующие ошибки. Кто-нибудь знает решение? (index): 77 Uncaught ReferenceError: $ не определен в passVal ((index): 77) -for-> $ .post ("test.php", data); at (индекс): 79 -for-> passVal ();
Найдено решение: добавьте строку <script src = ajax.googleapis.com ...
И я обнаружил, что не может получать контент POST на стороне php. PHP и javascript должны быть в одном или разных файлах? (Я пробовал оба. Файл .record сформирован, но внутри него нет содержимого)
Что не так, как я только что показал, я использую метод отправки формы на работе для получения данных из JavaScript на серверную часть практически каждый день.