我希望我的PHP脚本能够访问浏览器窗口的宽度。我一直在阅读这篇文章,PHP本身无法访问这些信息,但Javascript / jQuery可以,然后可以使用AJAX将其传递给服务器,因此PHP可以实现它。
在网上找到几个解决方案后,我写了下面的测试文件,称之为“test.php”
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<?php
if (!isset($_POST["window_width"])) {
?>
<script type="text/javascript">
var window_width = $(window).width();
$.ajax({
type: "POST",
data: "window_width="+window_width,
});
</script>
<?php
}
if(!isset($_POST["window_width"])) {
echo "not set";
}
?>
</html>
加载test.php显示“未设置”,表明PHP没有获取window_width变量。这对我来说似乎很奇怪,因为Firebug显示变量在那里(在我的计算机上设置为1366,因为这是我的浏览器的宽度)。
如何确保设置$ _POST [“window_width”]以便我可以使用PHP访问它?
答案 0 :(得分:3)
我不明白你的目标是什么,但看起来你忘了等到DOM准备好了。
$(function() {
var window_width = $(window).width();
$.ajax({
type: "POST",
data: "window_width="+window_width,
});
});
答案 1 :(得分:3)
您的服务器端代码不会暂停处理以等待JavaScript运行。您在这里处理两个单独的HTTP请求。
$_POST['window_width']
。 PHP返回包含该脚本的HTML文档。由于$_POST['window_width']
仍未为该请求设置,因此它还会回显未设置。$_POST["window_width"]
已设置并包含在返回JavaScript的文档中。success
处理程序(或HTTP请求返回时运行的任何其他代码),因此浏览器不会对该文档执行任何操作。Ajax是一种简单的说法“用JavaScript与网络服务器对话”。它不会阻止HTTP成为无状态请求 - 响应协议。
您尚未说明获取窗口宽度的用例(在页面加载后可能会发生变化),因此很难为您遇到的任何问题提出一个好的解决方案。 (您似乎已经问过XY Problem)。
想知道窗口宽度的两个常见原因是:
答案 2 :(得分:2)
我认为在这种情况下你不需要使用ajax,'outer'(?)页面需要接收数据,而不是'内部'ajax请求。
<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<?php
if (!isset($_POST["window_width"]) && !isset($_SESSION['window_width'])) {
?>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" id="window_width_form" style="display:none;">
<input name="window_width" id="window_width" value="" />
</form>
<script type="text/javascript">
$(function(){
$('#window_width').val($(window).width());
$('#window_width_form').submit();
});
</script>
</body>
<?php
}
elseif (isset($_POST['window_width']) && !isset($_SESSION['window_width']))
{
$_SESSION['window_width'] = $_POST['window_width'];
exit(header("Location: {$_SERVER['PHP_SELF']}\r\n"));
}
if(!isset($_POST["window_width"]) && !isset($_SESSION['window_width'])) {
echo "not set";
}
?>
</html>
答案 3 :(得分:1)
尝试
$.ajax({
url : "your url goes here"
type: "POST",
data: {"window_width":window_width}
});