如何使用AJAX来POST到PHP?

问题描述 投票:-1回答:1

如我所问 此处 我想知道如何将一个简单的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在同一个文件(index.php).编辑2:为了清晰,删除了旧代码。

这就导致了这些错误信息。

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

Notice: Undefined index: screenResolutionH in index.php on line 154
javascript php ajax post
1个回答
5
投票

你想做什么 $.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

为该文档添加了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
}

EDIT THREE

我把所有的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
投票

适应别人的答案。

试试吧。

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
投票

在做post请求之前,你必须使用序列化数组。

        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变量中得到值。


-1
投票

除了你从其他回复中发现的错误之外,你还有这些:$screenResoltuionW =......。

注意你写的是 "ltuion",而在fopen命令中你写的是正确的。 screenResolutionW

同样的事情,$screenResoltuionH...。

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

© www.soinside.com 2019 - 2024. All rights reserved.