用jquery传递变量,打开php页面然后把它拿起来

时间:2017-02-02 21:45:55

标签: php jquery

我有两页。在第一页,名为test1.html,我尝试检索用户时区。我想将它发送到一个名为test2.php的php页面,并使用变量(timezone)加载该页面而不是test1。这是代码。 Test1.html:

<script type="text/javascript">

$(document).ready(function() {
    var tz = jstz.determine(); // Determines the time zone of the browser client
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.

$.ajax({
        type: 'POST',
        url: 'test2.php',
        data: {'timezone': timezone},
        cache: false,
        success: function(){
                setTimeout(function () {
                        window.location = 'test2.php';
                }, 3000);//this will redirct to somefile.php after 3 seconds
        }
    });
});
</script>

Test2.php

<?php

if(isset($_POST['timezone']))
{

        $tz = $_POST['timezone'];
        echo "Timezone is " .$tz;
}
else {
        echo "Fail!";
}

?>

在test2.php的页面加载中,我只能得到“失败!”#39;信息。 jquery和php部分工作正常,因为我在test1.html中使用警报调用来测试它以记录来自php页面的响应。它给出了我预期的回应。

我认为在执行代码时会丢失我的变量以在同一窗口中重新加载test2.php。我只是不知道如何绕过这个问题。如果可能的话,我想使用POST而不是GET。

非常感谢任何帮助。

小注意:Idealy我想使用这个javascript和php在同一页面上,但问题是&#39;有一个PHP当然首先执行服务器端,然后它运行je js客户端后... ...

2 个答案:

答案 0 :(得分:1)

仍然允许您使用POST的替代解决方案,即您所说的,是将信息存储在会话变量中。会话是一个对象,可用于在请求之间存储值。见http://php.net/manual/en/book.session.php

Test1.html:

<script type="text/javascript">

$(document).ready(function() {
    var tz = jstz.determine(); // Determines the time zone of the browser client
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.

$.ajax({
        type: 'POST',
        url: 'test2.php',
        data: {'timezone': timezone},
        cache: false,
        success: function(){
                setTimeout(function () {
                        window.location = 'test3.php';
                }, 3000);            }
    });
});
</script>

Test2.php

<?php
// Start your session (if not already started)
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

// Store posted timezone in the session, which will be available in future calls
if(isset($_POST['timezone'])) {
    $_SESSION['timezone'] = $_POST['timezone'];
}
else {
    echo "Fail!";
}

?>

Test3.php

<?php
// Start your session (if not already started)
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
if(isset($_SESSION['timezone']) {
    echo "Your timezone is " . $_SESSION['timezone'];
} else {
    echo "Fail!";
}

答案 1 :(得分:0)

您误解了客户端和服务器之间的交互流程。您的代码向test2.php发送POST请求,然后THEN(在请求完成时触发的成功回调中)重定向到test2.php。第一次运行test2.php时,它获取时区POST变量,但第二次没有。您可以通过在浏览器的开发者工具中查看网络流量来查看此信息 - 您将看到两个test2.php请求。第一个将返回&#34;时区是......&#34;,第二个(您的浏览器正在显示)说&#34;失败!&#34;

有不同的方法可以获得您想要的内容,但最简单的方法是完全跳过AJAX,只需将时区与重定向一起发送:

$(document).ready(function() {
    var tz = jstz.determine(); // Determines the time zone of the browser client
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.

    // This redirects to test2.php while setting a GET parameter called "timezone"
    window.location = 'test2.php?timezone='+encodeURIComponent(timezone);
});

<?php

if(isset($_GET['timezone']))
{

        $tz = $_GET['timezone'];
        echo "Timezone is " .$tz;
}
else {
        echo "Fail!";
}

?>