Как использовать AJAX для POST до PHP? - PullRequest
0 голосов
/ 01 мая 2020

Как я и просил здесь Я хотел бы знать, как я мог бы передать данные из простой функции JS в php и записать их там.

Я нашел этот ответ и попытался последовать ему. Это мой код прямо сейчас (оба в одном файле)

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

<body>

    <script>
        function getClientScreenResolution() {
            var screenResolutionW = screen.width; 
            var screenResolutionH = screen.height;
            console.log(screenResolutionW + ' ' + screenResolutionH)
            $.post("index.php", {screenResolutionW: screenResolutionW, screenResolutionH: screenResolutionH})
        }
    </script>

    <script type="text/javascript">
        getScreenResolution();
    </script>

</body>
</html>
<?php

$screenResolutionW  = $_POST['screenResolutionW'];
$screenResolutionH  = $_POST['screenResolutionH'];

if(isset($_POST['screenResolutionW'])) {
   $fh = fopen('log.txt', 'a');     
   fwrite($fh, 'Screen res: '."".$screenResolutionW .'x'."".$screenResolutionH 
."\r\n");
   fclose($fh);
}
?>

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

Редактировать: Мои PHP и HMTL в том же файле (индекс. php). Редактировать 2: удален старый код для ясности.

Это приводит к следующим сообщениям об ошибках:

Notice: Undefined index: screenResolutionW in index.php on line 153

Notice: Undefined index: screenResolutionH in index.php on line 154

Ответы [ 4 ]

5 голосов
/ 01 мая 2020

Что вы хотите сделать с $.post, так это включить ваши данные следующим образом:

$.post("index.php", {screenResolutionW: screenResolutionW, screenResolutionH: screenResolutionH})

, где первая из пары является идентификатором POST (['screenResolutionW']), а вторая из пары это значение переменной.

Вы также захотите изменить свои идентификаторы POST для цитирования:

$screenResolutionW  = $_POST['screenResolutionW'];
$screenResolutionH  = $_POST['screenResolutionH'];

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

fwrite($fh, 'Screen res: '."".$screenResolutionW .'x'."".$screenResolutionH ."\r\n");

РЕДАКТИРОВАТЬ

Часть проблемы что вы никогда не вызываете функцию для ее выполнения. Вот ваш HTML с предложениями, которые я предложил, плюс вызов функции:

EDIT TWO

Добавлен обработчик загрузки для документа:

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

<body>

    <script>
        function getScreenResolution() {
            var screenResolutionW = screen.width; 
            var screenResolutionH = screen.height;
            console.log(screenResolutionW + ' ' + screenResolutionH);
            $.post("index.php", {screenResolutionW: screenResolutionW, screenResolutionH: screenResolutionH})
        }
    </script>

</body>
<script type="text/javascript">
    $(function() { 
        getScreenResolution();
    });
</script>
</html>

ДРУГИЕ ЗАМЕЧАНИЯ

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

Затем после разделения вы не должны запускать ваш PHP до тех пор, пока вы не проверите на наличие переменная, например:

if(isset($_POST['screenResolutionW'])) {
    // your code to write to the file here
}

РЕДАКТИРОВАТЬ ТРИ

Я поместил все JavaScript в один и тот же блок скрипта в заголовке файла и получил протестировано снова:

<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"> </script>
    <script type="text/javascript">
    $(function() { 
        function getScreenResolution() {
            var screenResolutionW = screen.width; 
            var screenResolutionH = screen.height;
            console.log(screenResolutionW + ' ' + screenResolutionH);
            $.post("post_test.php", {screenResolutionW: screenResolutionW, screenResolutionH: screenResolutionH})
        }
        getScreenResolution();
    });
    </script>
</head>

<body>

</body>
</html>

Здесь вы видите, что переменные публикуются: enter image description here

1 голос
/ 01 мая 2020

Адаптируй ответы других.

попробуй:

function getScreenResolution() {
    "http://example.com/index.php", screenResolutionW + screenResolutionH
    $.ajax({
        url: '/index.php',
        method: 'POST',
        data: {
            screenResolutionW : screen.width,
            screenResolutionH : screen.height
        },
        success: function(data) { console.log(data); }
    });
}

А у тебя PHP

$screenResolutionW  = $_POST['screenResolutionW'];
$screenResolutionH  = $_POST['screenResolutionH'];

echo $screenResolutionW . " - " . $screenResolutionH;
0 голосов
/ 01 мая 2020

Помимо всех тех ошибок, которые вы обнаружили благодаря другим ответам, у вас есть эти: $ screenResoltuionW = ...

Обратите внимание, что вы написали "ltuion", и в команде fopen вы правильно ее исправили. screenResolutionW

То же самое с $ screenResoltuionH ...

Вот почему вы не получаете никакого значения в файле, потому что эти переменные не существуют.

0 голосов
/ 01 мая 2020

вы должны использовать сериализацию массива перед выполнением пост-запроса.

        var screenResolutionW = screen.width; 
        var screenResolutionH = screen.height;
        var serializedArr = {
                    width: screenResolutionW,
                    height: screenResolutionH
                  };
        $.post('/index.php', serializedArr, function(response) {
            // Log the response to the console
            console.log("Response: "+response);
        });

В конце сервера вы получите значения в переменной $ _POST.

...