我有两页。在第一页,名为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客户端后... ...
答案 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!";
}
?>