【问题标题】:How to use AJAX to POST to PHP?如何使用 AJAX POST 到 PHP?
【发布时间】:2020-05-01 13:18:08
【问题描述】:

正如我问here 我想知道如何将数据从一个简单的 JS 函数传递到 php,并在那里记录。

我找到了this 答案并尝试关注它。这是我现在的代码(都在同一个文件中)

<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 在同一个文件 (index.php) 中。 编辑 2:为清楚起见,删除了旧代码。

这会导致以下错误消息:

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

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

【问题讨论】:

  • 在您的 PHP 代码中,您正在提取从不存在的密钥,因此您需要将它们发送到您的 JS 代码中,就像这样 $.post("index.php", {screenResolutionW: screenResolutionW, screenResolutionH: screenResolutionH}
  • 您必须在 $.post 中提供 @SaymoinSam 的 JSON 格式字符串中学习 som 基础知识。
  • 为什么要改函数?
  • stackoverflow.com/a/61544141/12112111,我想我应该试试。我会把它改回你的建议。
  • 现在检查我编辑的答案,我在这里展示了如何调用该函数。

标签: javascript php ajax post


【解决方案1】:

你想用$.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 以及我建议的添加内容,以及调用函数:

编辑两个

为文档添加了 onload 处理程序:

<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 代码分开并将其放在不同的文件中,因为当您现在运行页面时,您应该在页面最初运行时记录一行没有变量的记录,然后在运行 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>

在这里您可以看到正在发布的变量:

【讨论】:

【解决方案2】:

调整其他答案。

试试看:

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;

【讨论】:

    【解决方案3】:

    在进行发布请求之前,您必须使用序列化数组。

            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 变量中获取值。

    【讨论】:

    • PHP 不回显任何内容,因此不会有response 登录到控制台。
    【解决方案4】:

    除了您在其他回复中发现的所有错误外,您还有以下这些: $screenResoltuionW = ...

    请注意,您写了“ltuion”,并且在 fopen 命令中您写的正确。屏幕分辨率W

    与 $screenResoltuionH 相同...

    这就是为什么您在文件中没有得到任何值的原因,因为这些变量不存在。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-10
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多