1

我有一个移动应用程序,它打开一个应用程序内浏览器,该浏览器使用 URL 将信息传递到我的服务器,例如 deviceID。

例如浏览器将打开网页(jquery Mobile):www.myserver.com/doWork.html#deviceID

在 doWork.html 文件中使用 JavaScript 的服务器部分,我得到了这样的 deviceID:

var userId = window.location.hash.substring(1);

我可以使用 传递信息hash #吗?在 jquery mobile 中,当有人使用Multi-Page template structure. 所以我担心也许我应该使用别的东西,比如问号(?)

还是完全没问题?

4

2 回答 2

1

不。停止使用 # 进行数据传输。让 jQM 做它的事。不要打扰它。使用查询字符串(在 url 中添加 ?)。我的建议是停止使用查询字符串(?标签)和#标签将数据发送到下一页。使用localStorage. 与查询字符串相比,它更安全,因为用户不会看到 URL 更改,因此您的敏感数据至少在一定程度上是隐藏的。localStorage是 HTML5 的 API,类似于为每个域预留的临时存储空间。此数据将一直存在,直到缓存中的数据被清除。假设您有一个指向 dowork.html 的锚标记,

<a href="doWork.html" data-role="button">Go to Do work</a>

在标签本身中添加设备 ID 的属性,如下所示:

<a href="doWork.html" data-deviceid="10" data-role="button">Go to Do work</a>

您将动态地执行此操作,您也可以以相同的方式使用它。你明白要点了吗?

一个点击事件看起来像这样:

$(document).on("click", "a", function(e) //use a class or ID for this instead of just "a"
  //prevent default
  e.preventDefault();
  //get device id from tag attribute
  var deviceId = $(this).data("deviceid");
  //set it in localStorage 
  localStorage["dId"] = deviceId;
  //redirect 
  $.mobile.changePage(this.href);
});

然后,在其他页面pageinit(或任何事件)中,从存储中获取设备 ID 并将 ajax 调用发送到服务器。

//assuming #dowork is the id of a div with data-role="page"
$(document).on("pageinit", "#dowork", function() { 
  //get from storage
  var deviceId = localStorage["dId"];
  //make ajax call or server call with deviceId here
});

但是,如果您仍想为此使用 URL,请查看此问题。我已经在那边给出了一个足够体面的答案。

于 2013-08-07T02:26:26.240 回答
1

要将变量传递给服务器,您应该避免使用 # 符号,因为无论您使用的框架如何,此符号用于其他目的,在 GET 请求中将信息传递给服务器,您应该使用 ? 符号,应该这样做:www.myserver.com/doWork.html?deviceID=1233455

于 2013-08-05T16:42:12.033 回答