将javascript变量传递到下一页没有服务器端干扰?

时间:2012-03-26 02:14:41

标签: javascript html cordova

我正在使用PhoneGap制作网络应用。这是我目前的障碍:

在第一页,用户选择纬度和经度,然后点击继续。通过表单上的一些不错的GET操作和下一页上的javascript URL解析器,下一页因此传递了lat和lng坐标。在此新页面上,要求用户输入半径。通过相同的方法,将半径传递到最终页面,该页面显示一个谷歌地图,其上有一个圆圈,由坐标和半径组成。

但问题是,当我将半径传递到最后一页时,显然传递半径。如何从第二页开始传递lat和lng,这不是表单信息的一部分?他们已经建立起来了。我知道显而易见的解决方案是将所有三个变量放在一个页面上,但由于我无法控制的愚蠢原因,它需要这样。

所以问题就在于:如何将javascript中作为变量存在的信息传递到下一页?它不是表单的一部分。只是一个变量。

3 个答案:

答案 0 :(得分:1)

您需要做的就是在表单中添加一些隐藏的输入元素(<input type="hidden" />)。

这可以通过多种方式完成。最短的是使用库(示例代码恰好是jQuery):

$('<input type="hidden" name="lat" />').val(latitudeValue).appendTo(formSelector);
$('<input type="hidden" name="lng" />').val(longitudeValue).appendTo(formSelector);

Raw JS有点长,但并不是特别复杂:

//I haven't checked this, so some cross-browser tweaking might be necessary
var lat,
    lng,
    form;
lat = document.createElement('input');
lat.type = 'hidden';
lat.value = latitudeValue;
lng = document.createElement('input');
lng.type = 'hidden';
lng.value = longitudeValue;
form = document.querySelector(formSelector);
form.appendChild(lat);
form.appendChild(lng);

latitudeValuelongitudeValueformSelector是您必须在页面上下文中定义的变量。您还可以使用其他参数名称,例如name="longitude"


听起来你真的应该使用AJAX来改变页面的内容,这样你就不会发出连续的GET请求。相反,您可以简单地根据用户进程中的哪个步骤更换页面的主要内容。它将消除进行任何URL解析的必要性(这很容易做错)。

答案 1 :(得分:0)

您可以在Javascript中访问获取数据。因此,只需将数据传递到下一页作为URL中的数据,并使用Javascript将其解析如下。

最后,您的网址包含?foo=1&bar=2,您可以使用

解析foo和bar
var parts = window.location.search.substr(1).split("&");
var $_GET = {};
for (var i = 0; i < parts.length; i++) {
    var temp = parts[i].split("=");
    $_GET[decodeURIComponent(temp[0])] = decodeURIComponent(temp[1]);
}

alert($_GET['foo']); // 1
alert($_GET.bar);    // 2

答案 2 :(得分:0)

更简单的选择是使用Javascript / jQuery创建cookie并将值添加到其中。因此,您可以在每个页面上添加所有值,然后最终从cookie中检索所需的数据。 您没有使用服务器端脚本,但您获得了所需的所有值。