Как передать данные из Javascript в PHP и наоборот? - PullRequest
11 голосов
/ 02 января 2009

Как передать скрипту 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))

Ответы [ 7 ]

19 голосов
/ 02 января 2009

Передача данных из 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.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    httpc.setRequestHeader("Content-Length", params.length); // POST request MUST have a Content-Length header (as per HTTP/1.1)

    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 оставлены читателю в качестве простых упражнений;)

9 голосов
/ 15 января 2014

Я столкнулся с подобной проблемой на днях. Скажем, я хочу передать данные со стороны клиента на сервер и записать данные в файл журнала. Вот мое решение:

Мой простой код на стороне клиента:

<!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);
?>

Надеюсь, что это работает для вас и будущих читателей!

7 голосов
/ 02 января 2009

Я бы использовал JSON в качестве формата и Ajax (на самом деле XMLHttpRequest) в качестве механизма клиент-сервер.

2 голосов
/ 03 июня 2010

Использование куки - это простой способ. Вы можете использовать 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 и т. Д.)

2 голосов
/ 02 января 2009

Есть несколько способов, наиболее выдающимся из которых является получение данных формы или получение строки запроса. Вот один метод, использующий JavaScript. Когда вы нажимаете на ссылку, она вызывает _vals ('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.

1 голос
/ 02 января 2009

Вы можете передавать данные из PHP в javascript, но единственный способ получить данные из javascript в PHP - через AJAX.

Причина в том, что вы можете создать действительный javascript через PHP, но чтобы получить данные в PHP, вам потребуется снова запустить PHP, а поскольку PHP работает только для обработки вывода, вам потребуется перезагрузка страницы или асинхронный запрос.

0 голосов
/ 10 мая 2009

другой способ обмена данными с php на javascript или наоборот - используя куки, вы можете сохранять куки в php и читать ваши javascript, для этого вам не нужно использовать формы или ajax

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