Как передавать данные с Javascript на PHP и наоборот?

Как я могу передать Javascript script запрос страницы PHP и передать ему данные? Как я могу передать данные PHP скрипт обратно в Javascript script?

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))

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

Я думаю, вы более или менее просто описали Ajax.

(извините за краткий ответ)

Ответ 5

Есть несколько способов, наиболее заметными из которых являются получение данных формы или получение строки запроса. Здесь один метод с использованием 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 для достижения этого, что значительно облегчает его работу.

Я уверен, что есть, вероятно, больше методов, которые лучше, но это всего лишь несколько, о чем spring.

РЕДАКТИРОВАТЬ: Основываясь на этом из того, что говорили другие, используя вышеупомянутый метод, у вас будет якорный тег, например

<a onclick="_vals('name', 'val')" href="#">My Link</a>

И затем в вашем PHP вы можете получить данные формы, используя

$val = $_POST['value'];

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

Ответ 6

Использование файлов cookie - это простой способ. Вы можете использовать jquery и pluging как 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/

Я использовал Ashley RSJS Script для обновления значений в HTML без каких-либо проблем в течение длительного времени, пока не встретил JQuery (ajax, load и т.д.)

Ответ 7

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

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

Ответ 9

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