我希望我的表单在不点击提交按钮的情况下采取行动。我实现了这个目标,但现在我已经走到了十字路口。如果我在action属性中使用脚本URL,我的用户会跳转到另一个页面。如果我瞄准脚本本身,我会让他陷入无休止的循环中。我该如何解决这个问题?
这是我的代码:
<form class="myForm" action="includes/teste.php" method="POST" id="form-id">
<input name="myField" type="hidden" id="myField" class="myField" value="" />
</form>
<script language="JavaScript" type="text/javascript">
window.onload=function(){
if(navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition);
}
else
{
alert("Geolocation is not supported by this browser.");
}
}
function showPosition(pos){
document.getElementById('myField').value = (pos.coords.latitude+","+pos.coords.longitude);
document.getElementById("form-id").submit()
}
</script>
如果你想知道这是teste.php应该做的事情:
<?php
session_start();
$_SESSION["origin"] = $_POST['myField'];
?>
基本上这就是我想要实现的目标,但不会无休止地重新加载页面或重新修改用户。
JS代码本身将用户当前位置的经度和纬度发送到隐藏输入的值。我需要从那里获取它并将其存储在$ _SESSION中。
答案 0 :(得分:1)
不是试图在PHP中创建$ _SESSION变量,而是可以使用JS创建一个cookie,然后使用$ _COOKIE ['name']在任何需要的地方使用PHP访问它。
为了方便起见,请将其添加到文档的开头:
<script type="text/javascript">
function set_cookie ( cookie_name, cookie_value, lifespan_in_days, valid_domain )
var domain_string = valid_domain ? ("; domain=" + valid_domain) : '' ;
document.cookie = cookie_name + "=" + encodeURIComponent( cookie_value ) +
"; max-age=" + 60 * 60 * 24 * lifespan_in_days +
"; path=/" + domain_string ;
}
</script>
然后将document.getElementById("form-id").submit()
替换为set_cookie( "origin", pos.coords.latitude+","+pos.coords.longitude, 7 );