如我所问 此处 我想知道如何将一个简单的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
你想做什么 $.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>
适应别人的答案。
试试吧。
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;
在做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变量中得到值。
除了你从其他回复中发现的错误之外,你还有这些:$screenResoltuionW =......。
注意你写的是 "ltuion",而在fopen命令中你写的是正确的。 screenResolutionW
同样的事情,$screenResoltuionH...。
这就是为什么你在文件中得不到任何值的原因,因为这些变量并不存在。