【问题标题】:Passing an array through localStorage into a new array not working as intended将数组通过 localStorage 传递到新数组中,但未按预期工作
【发布时间】:2015-08-27 18:33:11
【问题描述】:

这是一个相当长、复杂和具体的问题,但我希望有人能提供帮助,因为我似乎找不到破解它的原因/逻辑。

注意我知道我使用的是已弃用的 mysql,但这不是问题所在(而且我的托管站点只支持旧版本)

第 1 部分是 dataLoader.php -> 此脚本查询数据库。从它得到的表中,我们有posxposy 用于表中的每一行。然后这些通过 localStorage 发送到另一个页面 - download.php。这是来自dataLoader.php的相关代码:

<html>
<meta http-equiv="refresh" content="10">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
  var xPos = [];
  var yPos = [];
</script>
<?php //*Connect to database* 
$locationq = "SELECT posx, posy FROM locations";
$locationrs = mysql_query($locationq) or die ('Couldnt get location'.mysql_error());
while ($locrow = mysql_fetch_assoc($locationrs))
{
	echo " | " .$locrow['posx'] . " | " . $locrow['posy'];
	$posx = $locrow['posx'];
	$posy = $locrow['posy'];
	echo "<input type ='hidden' class='posx' name='posx' value='$posx' >";
	echo "<input type ='hidden' class='posy' name='posy' value='$posy' ><br>";
	echo "<script> xPos.push($('.posx').val());  yPos.push($('.posy').val()); 
	</script>";
}
echo 	"<script>localStorage.setItem('xPos',xPos); 
		localStorage.setItem('yPos',yPos);</script>";
echo $posx;
echo $posy;
exit; 
mysql_close(); ?>
</body>


</html>

第 2 部分是 download.php,其中来自 dataLoader.php 的数据(坐标)被提取并绘制到谷歌地图上。 问题是当我检查 localStorage(使用 f12)时,它有两次第一行的值,而不是有 2 组不同的值。

让我感到困惑的一点是它只将第一个团队的值存储在数据库表中,而不是第二个。我的麻烦是为表格中的每一行获取 posx 和 posy ,然后为每个 posx 和 posy 在地图上放置一个标记。回显显示的值(两行的值不同),但在 localStorage 中它只是第一行的值。

但是,由于某种原因,我在传递第二个表格行的值时遇到了麻烦。

  • 当然,如果有什么我应该得到最后一行的值,而不是第一行的值,因为循环至少运行一次,但我似乎得到的只是来自第一个循环的数据。希望这一切都有意义,并提前感谢。

    • 在屏幕截图中,您可以看到左侧的 echo 输出与本地存储中存储的值不对应。

【问题讨论】:

  • 对于 downloader.php,浏览器看到的 HTML/Javascript 是什么样的?请提供一个 Minimal, Complete, Tested and Readable example 来证明该问题。
  • 我已经编辑了它,希望我的问题现在更清楚了。
  • 您是否通过回显屏幕检查了循环外的返回值
  • 我试过了,回显显示第二行的值,而在存储中它仍然有第一行的值两次...我编辑了 OP,因为我想也许我需要仅在数组已满时才存储数组,但这也无济于事
  • 我会附上截图,一秒更清楚地说明问题

标签: javascript php arrays google-maps local-storage


【解决方案1】:

比预期简单得多,我只需要echo "&lt;script&gt; xPos.push($posx); yPos.push($posy);&lt;/script&gt;";

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多