【问题标题】:Pass javascript array to another page将javascript数组传递到另一个页面
【发布时间】:2015-06-12 10:19:16
【问题描述】:

我想知道是否有办法将数组及其内容传递到另一个页面以供使用。

我正在使用一个数组来存储用于在谷歌地图上绘制折线的坐标。该数组在一页上工作正常,但是当我尝试调用该数组以在另一张地图上绘制折线点时,似乎该数组已被清空并且没有绘制折线点。

我尝试将 localStorage 与 JSON stringify 一起使用,但遇到了许多问题,谷歌地图不接受 ether 值,因为它们包含不期望的值,或者因为它根本无法识别格式。

var googleLatLng = [],
    latlngs = [];

function storeLatLng( lat, lng ) {
    googleLatLng.push(new google.maps.LatLng(lat, lng));
    latlngs.push([lat, lng]);

        // setcoords = JSON.stringify(googleLatLng);
        // localStorage.setItem('GoogleLatLng', setcoords);

        // console.log(localStorage.getItem("GoogleLatLng"));

        console.log(googleLatLng);
}

此代码从给定坐标构建数组,该函数通过watchPosition函数的onSuccess调用

        storeLatLng(lat, lon);

然后我想在以下函数中使用数组值

function finishedWalk() {
        // storedCoords = localStorage.getItem('GoogleLatLng');
        // if(storedCoords) storedCoords = JSON.parse(storedCoords);
        navigator.geolocation.getCurrentPosition(onFinishedSuccess, onFinishedError);
}

    function onFinishedSuccess(position) {

    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;
    coords = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);

    storeLatLng(latitude, longitude);

        var mapOptions = {
            zoom: 17,
            center: coords,
            mapTypeControl: true,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        //create the map, and place it in the HTML map div
        map = new google.maps.Map(document.getElementById("mapPlaceholder"), mapOptions);

        if (googleLatLng.length > 0) {
          var path = new google.maps.Polyline({
            path: googleLatLng,
            strokeColor: "#FF0000",
            strokeOpacity: 1.0,
            strokeWeight: 5
          });
          path.setMap(map);
        }
}

调用另一个页面的onLoad

【问题讨论】:

标签: javascript arrays google-maps cordova


【解决方案1】:

使用会话存储或本地存储传递数据:(基本示例)

您可以使用会话存储将数据从一个页面传递到下一个页面。或者,您也可以使用行为类似的本地存储。除非会话关闭时不会清除本地存储。

对于本地存储,只需将 sessionStorage 替换为 localStorage

要存储的数组:

var testArray = ['test'];

存储数组:

$('#store').on('click', function(){
    sessionStorage.setItem('myArray', testArray);
});

获取数组:

$('#get').on('click', function(){
    var myArray = sessionStorage.getItem('myArray');
    alert(myArray);
});

清除会话存储:

$('#clear').on('click', function(){
    sessionStorage.clear();
});

HTML:

<a href="javascript:void(0);" id="store">Store Array</a>
<a href="javascript:void(0);" id="get">Get Array</a>
<a href="javascript:void(0);" id="clear">Clear</a>

查看 chrome 中存储的会话:

如果存储字符串化数据,请确保转换回 JSON:

var mydata = localStorage.getItem("GoogleLatLng");
var myObject = JSON.parse(mydata);

演示:

http://jsfiddle.net/mdktpmw2/

支持旧版本的 Internet Explorer:

一些资源:

【讨论】:

  • 我已经使用 jQuery mobile 重建了应用程序,以便所有 javascript 都位于同一个 html 文档中,我将尝试您的解决方案,看看它是否能解决我的问题
【解决方案2】:

您需要将数据发布到另一个页面。有大量教程可以引导您完成,包括一些已经回答的 Stack 答案:

how can i send the data to another page without appending it in url?

passing form data to another HTML page

您可能希望在下一页的 onLoad 中获取数据。

【讨论】:

  • 发布是否允许我将数组保持为当前格式并保留其中的所有数据?我还希望能够在以后调用这个相同的数组来上传到服务器
  • 是的,看看这个教程:boutell.com/newfaq/creating/scriptpass.html
  • 该示例使用 php,因为我正在 phonegap 中构建应用程序,因此无法使用 php 文件进行数据传输
  • 不需要发布数据..您可以使用会话存储..或者使用诸如Angular之类的框架并构建单页应用程序。
  • @KrisHollenbeck 如果我使用 jQuery mobile 之类的东西,我可以传递变量吗,因为我试图让我的头绕着角度,并且在我完成这个应用程序所剩的时间里,它的学习曲线非常陡峭
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 2011-01-18
  • 1970-01-01
  • 2020-11-20
相关资源
最近更新 更多