Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача переменной из php в js без перезагрузки страницы (https://javascript.ru/forum/misc/80351-peredacha-peremennojj-iz-php-v-js-bez-perezagruzki-stranicy.html)

Амай 25.05.2020 23:45

Передача переменной из php в js без перезагрузки страницы
 
Через ajax передаю id блоков на которых нажали в php и сохраняю в файле из файла нужные значения обратно передаю в js но надо без перезагрузки страницы передать, попробовал json но что то делаю не так и скрипт не работает, помогите разобраться видимо какие то глупости написал.

<html>                                                                  
<head>      
                                                         
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>

                                                          
</head>
<body>


<?php


$myFile = "count.txt";
$lines = file($myFile);//file in to an array
$ipp =1;
$itt = $ipp+1;


if ($lines[$itt] == 0) {
echo $lines[$ipp]; // если следующая строка после 1 элемента массива 1+1 =2 2 строка равно нулю то выводим 1 строку
}
if ($lines[$itt] != 0) 	{   // иначе если не равно нулю то к ipp добавляется по циклу 1 и проверяется пока не выполнится условие при котором itt равно нулю
	for($i = 0; $i > $lines[$itt] == 0; $i++){
	$ipp = $ipp +1;
	$itt = $ipp+1;
	}
}


if ($lines[$itt] == 0) {
	$uil = $lines[$ipp];
	$ppp = 0;
	$eee = $ppp + $uil;
echo $uil; //line 2
echo json_encode($eee);
}
?>


<script type="text/javascript">
$(function(){

 
  $('div').each(function (index, element) {

$(this).not( "#y" ).not( "#ii" ).not( "#left" ).not( "#right" ).not( "#top" ).not( "#boot" ).not( "#rt" ).not( "#poleslov" ).not( "#teksts" ).click(function() {
		
		var a = $(element).attr("id"); //https://dmitrylavrik.ru/blog/php/zagruzka-izobrazhenij-na-server здесь как загружать изображения
		
		
$.ajax({
url:'index.php',
type : "POST",
data:{test1:a},
success:function(data){
alert ("<? echo $eee ?>");

}
})
})


   
var tlllll = JSON.parse( "<?php json_encode($eee) ?>");
alert(tlllll);

});

});
</script>

<?php


//
if (isset($_POST['test1'])) {
	

	$ffff = $_POST['test1'];
	
	

$fd = fopen("count.txt", 'a');


fwrite($fd, $ffff . PHP_EOL);


fclose($fd);

	


}


?>


</body>
</html>

laimas 26.05.2020 03:25

И где здесь ajax? Тут вообще пусто, что там нажимается, что передается, какие проблемы, разве можно понять?

micscr 26.05.2020 09:36

JSON.parse( "<?php print json_encode($eee) ?>");

laimas 26.05.2020 12:53

micscr, Амай, здесь не нужен JSON.parse, клиент на странице получит уже готовый объект/массив.

laimas 26.05.2020 15:06

Цитата:

Сообщение от Амай
$(this).not( "#y" ).not( "#ii" ).not( "#left" ).not( "#right" ).not( "#top" ).not( "#boot" ).not( "#rt" ).not( "#poleslov" ).not

Это что за чудо? Покажите html из-за которого надо так напрягаться. И что нужно отправить на сервер асинхронно, то что касается "здесь как загружать изображения"?

Амай 26.05.2020 15:50

В общем есть множество мелких блоков html, через пхп цикл создал их и так же через цикл пхп задал каждому блоку уникальный id получилась сетка она как бы скрыта. При клике на любой участок экрана добавляется сверху блок с формой у которого большой zindex и человек может вводить текст и после того как нажимает отправить этот текст пхп принимает и вставляет в html блок и этот блок добаляется через append в div на которую кликал пользователь и у него самый большой zindex получается эффект что человек кликает на участок экрана открывается форма вводит текст нажимает вставить и этот текст затем вставляется именно в этот участок куда нажимал. В общем это работает, но вот значения id куда будут кликать надо где то сохранить отправил в пхп через ajax и сохраняю в файле без перезагрузки все значения добавляется в файл, но теперь надо обратно так же без перезагрузки получать из файла эти значения. Код отредактирую сейчас.

laimas 26.05.2020 16:41

В каких местах повествования нужно расставить точки и запятые?
Ничего из этого не понять, да и не рассказы нужны, а пример hrml-кода.
А отправить асинхронно на сервер, так у вас есть код такой, так и отправляется.
А вот var tlllll = JSON.parse( "<?php json_encode($eee) ?>");, тут ошибка и это лишнее. Должно быть либо echo, либо его краткая запись, и без добавления кавычек:

var tlllll = <?=json_encode($eee)?>;


так как json_encode($eee) запишет в вывод литеральное представление массива или объекта, в зависимости от того, какой массив на сервере кодируется. JSON.parse совсем не нужен.

Malleys 27.05.2020 23:13

Цитата:

Сообщение от laimas
var tlllll = <?=json_encode($eee)?>;

А зачем в JS находится PHP?

var tlllll = await fetch("get$eee.php").then(r => r.json());

Такой код можно обернуть в функцию, которая, например, вызывается при нажатии кнопки — будет свежее получение данных, а твой способ будет возвращать то, что «жестоко прибито к коду» и в принципе делает невозможным кеширование скрипта, поскольку его код всё время меняется.

laimas 28.05.2020 01:32

Цитата:

Сообщение от Malleys
А зачем в JS находится PHP?

А зачем он в html попадается, и вообще заем он?

Кстати именно в JS его и близко нет.

Malleys 04.06.2020 02:22

Цитата:

Сообщение от laimas
Кстати именно в JS его и близко нет.

А это что?
Цитата:

Сообщение от laimas
var tlllll = <?=json_encode($eee)?>;


laimas 04.06.2020 07:11

Цитата:

Сообщение от Malleys
А это что?

Вау, вы правы, это js выполняемый на стороне сервера. Серверу (окромя может только на Node), собственно говоря глубоко плевать, что и во что он вставляет, он просто занимается своей прямой задачей, выводит поток данных в браузер. Клиентским скриптом, html, css, это станет только на клиенте.

Malleys 04.06.2020 09:37

Цитата:

Сообщение от laimas
это js выполняемый на стороне сервера.

Нет! Это совершенно неверное представление, там через PHP формируется скрипт на JS, который затем выполняется в браузере.

Цитата:

Сообщение от laimas
Серверу (окромя может только на Node), собственно говоря глубоко плевать, что и во что он вставляет

Вот именно такие вставки и ужасны! Если вы пишете на PHP, то пишите на PHP, а не разводите в файле, в котором следует быть PHP коду мешанину из JS, CSS, HTML и PHP и т. д. рекурсивно.

laimas 04.06.2020 09:47

Цитата:

Сообщение от Malleys
Это совершенно неверное представление, там через PHP формируется скрипт на JS

Цитата:

Сообщение от Malleys
Вот именно такие вставки и ужасны! Если вы пишете на PHP

Ты себя нормально чувствуешь? Гонишь какой-то бред, тогда какого хрена РНР занимается и выводом html?

Malleys 04.06.2020 11:24

Цитата:

Сообщение от laimas
Гонишь какой-то бред

Я не предлагал посреди текста программы производить вставки при помощи PHP. Я вообще-то против такого!

Цитата:

Сообщение от laimas
Должно быть либо echo, либо его краткая запись, и без добавления кавычек:

var tlllll = <?=json_encode($eee)?>;

Тут на самом деле будет синтаксическая ошибка с точки зрения JS. Также не возможна минификация и сборка. При каждом запросе на сервер будет новая генерация кода, а значит кеширование не возможно.

С точки зрения программиста этот код — настоящее говно, его следует выкинуть, а такому автору — заняться вместо программирования тем, в чём он лучше будет разбираться. Однако с точки зрения PHP разработчика — это самый обычный код. Менталитет, однако!

Совсем другое дело, когда на PHP генерируются данные, например, в формате JSON, которые будут запрашиваться из программы на JS. А вот генерирование произвольного кода на JS из PHP обычно не нужно.

laimas 04.06.2020 11:42

Цитата:

Сообщение от Malleys
ут на самом деле будет синтаксическая ошибка с точки зрения JS

Это какая же?

Цитата:

Сообщение от Malleys
Совсем другое дело, когда на PHP генерируются данные, например, в формате JSON, которые будут запрашиваться из программы на JS.

Надо быть либо параноиком, либо упертым фанатиком JS.

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

Не важно какой на сервере язык, он в общем-то по большому счету работает со строковыми данными, это уже задача клиента их трактовать так как ему предписано.

Ничем не запрещено вставлять в тело страницы как css, так и javascript, и если это выгодно сделать именно так, то так и делают. Ладно бы, если бы ваш отдельный запрос обрабатывался не серверным языком, а чем-то специально предназначенным, тогда можно было бы говорить, что РНР отвязан от этой рутины, и вставка языком РНР js-данных в выводимый поток, это плохо.

Ранее, когда веб технологии не так были развиты как сейчас, серверный язык вообще формировал целые css и js файлы, так как содержимое их зависело от динамически изменяемых данных. И небо от этого не падало. Если и в нынешнее время потребуется такое, ничего страшного не произойдет, если подключение скрипта будет таким <script src="name.php"></script>, причем расширение php можно и скрыть, указав js, забота обращения к сценарию на сервере при этом возлагается на .htaccess. Плохо будет, если вместо такого подхода объявить .js выполняемыми файлами.

Нет на сервере js, и считать вставку js/css кода в тело страницы недопустимым явлением, это бредятина. Все определяется целесообразностью в каждом конкретном случае, а не тем как вам это нравится.

micscr 06.06.2020 06:52

Цитата:

Сообщение от Malleys (Сообщение 525052)
А зачем в JS находится PHP?

var tlllll = await fetch("get$eee.php").then(r => r.json());

А что это будет за точка входа eee.php?
О ней придется дополнительно думать, защищать ее, а выше этого не требовалось.

Цитата:

Сообщение от Malleys (Сообщение 525407)
Совсем другое дело, когда на PHP генерируются данные, например, в формате JSON, которые будут запрашиваться из программы на JS.

Ну оно обычно так и делается. JS код должен находиться по максимуму в js файлах, но некоторый, стартовый, можно и сгенерировать.
Цитата:

Сообщение от Malleys (Сообщение 525407)
А вот генерирование произвольного кода на JS из PHP обычно не нужно.

Это вопрос мировозренческий.
Например в Yii js код клиентской валидации генерируется автоматически в зависимости от того что в php моделях.
Т.к. источник истины на сервере.

Vlasenko Fedor 07.06.2020 00:53

Malleys,
че ты к кешированию то пристал
формы не стоит кешировать
там защита от CSRF должна быть
посмотри до чего доходили https://bolknote.ru/all/3185/
когда небыло http2
и выше тебе правильно написали, что возможны проекты в которых тот или иной (js,css) генерился сервером, затем добавили заголовок ты даже не заметишь разницу

Malleys 18.06.2020 18:51

Цитата:

Сообщение от Poznakomlus
и выше тебе правильно написали, что возможны проекты в которых тот или иной (js,css) генери[рова]лся сервером, затем добавили заголовок ты даже не заметишь разницу

Для генерирования CSS есть препроцессоры, а ваши усложнения структуры проекта очевидно нужны для хвастовства перед заказчиками.

Генерирование исходного кода, заполненного некими данными, означает лишь, что вы не умеете отделять данные от бизнес-логики. Тя́раызэ́ви, ла́чыкызла́йт!

Цитата:

Сообщение от micscr
А что это будет за точка входа eee.php?

Ну это так любят называть PHP-разработчики, чтобы непременно было «точка пфиечпфи́»... А так обычно это одна точка входа, типо /my-api и т. п.

Цитата:

Сообщение от Poznakomlus
формы не стоит кешировать

Формы, отправленные методом POST определённо не стоит. Не стоит и приписывать мне того, что я не писал!

Цитата:

Сообщение от micscr
Это вопрос мировозренческий.

Очевидно когда всё в одну кучу, то всё кажется правильным и хорошим. Но обычно никто не генерирует TypeScript, Java, C# и пр. код при помощи PHP, очевидно и вам стоит узнать про отделение данных от бизнес-логики.

Цитата:

Сообщение от micscr
Например в Yii js код клиентской валидации генерируется автоматически в зависимости от того что в php моделях.

Тут в теме идёт речь о написании кода программистом! Проверь ещё раз сообщение №1. Человек очевидно писал код руками.

Вопрос-то как раз в том, почему вместо использования подходящих инструментов, вы хотите городить костыли при помощи PHP.

Poznakomlus писал про генерирование CSS при помощи PHP. Вы с таким подходом можете совершить кучу ошибок и кто о них вам сообщит? Например, когда мне нужно написать более сложный CSS, код которого может быть проще выражен, например, при помощи циклов, то почему вместо SCSS с его инструментами я должен использовать PHP с нулём возможностей работы с CSS?

Цитата:

Сообщение от laimas
Надо быть либо параноиком, либо упертым фанатиком JS.

Нет, такой формат используется не только в JS. Замерь ещё при помощи своего фанатикоизмерителя YAML, CSV, ProtoBuf и пр.


Часовой пояс GMT +3, время: 08:37.