簡體   English   中英

使用PHP顯示瀏覽器窗口寬度

[英]display browser window width using PHP

我希望我的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訪問它?

描述

我不明白你的目標是什么,但看起來你忘了等到DOM准備好了。

樣品

$(function() {
   var window_width = $(window).width();
   $.ajax({
       type: "POST",
       data: "window_width="+window_width,
   });
});

您的服務器端代碼不會暫停處理以等待JavaScript運行。 您在這里處理兩個單獨的HTTP請求。

  1. 瀏覽器請求HTML文檔
  2. 由於沒有為該請求設置$_POST['window_width'] PHP返回包含該腳本的HTML文檔。 由於$_POST['window_width'] 仍然沒有為該請求設置,因此它也沒有設置回聲。
  3. 瀏覽器接收HTTP響應並解析它。 作為此過程的一部分,它運行JavaScript。
  4. JavaScript發出POST請求...默認情況下jQuery發送請求的地方,因為你沒有包含URI(一個非常快速的測試建議是當前的URI)。
  5. 對於此請求, $_POST["window_width"]已設置並包含在返回給JavaScript的文檔中。
  6. 由於JavaScript沒有success處理程序(或HTTP請求返回時運行的任何其他代碼),因此瀏覽器不會對該文檔執行任何操作。

Ajax是一種簡單的說法“用JavaScript與網絡服務器對話”。 它不會阻止HTTP成為無狀態請求 - 響應協議。

你還沒有說明你的用例來獲取窗口寬度(頁面加載后可以改變),因此很難為你遇到的任何問題提出一個很好的解決方案。 (您似乎已經問過XY問題 )。

想知道窗口寬度的兩個常見原因是:

  • 統計信息 - 在這種情況下,您可以只使用PHP處理數據,而不必擔心將其呈現給客戶端
  • 更改布局 - 通常使用CSS媒體查詢可以更好地實現

在這種情況下,我不認為你需要使用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>

嘗試

$.ajax({
        url : "your url goes here"
        type: "POST",
        data: {"window_width":window_width}
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM