我在使用jQuery Mobile时可以通过URL传递信息吗?

时间:2013-08-05 16:16:16

标签: javascript jquery html jquery-mobile hash

我有一个移动应用程序,它打开一个应用程序内浏览器,使用该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时,哈希#用于在页面之间进行更改。所以我担心也许我应该使用别的东西,比如问号(?)

或者它完全没问题?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

否。停止使用#进行数据传输。让jQM做其事。别打扰它。使用查询字符串(在url中添加?)。 我的建议是停止使用查询字符串(?标签)和#标签将数据发送到下一页。使用localStorage处理它。与Query字符串相比,它更安全,因为用户不会看到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
});

但是,如果您仍想使用此网址look at this question。我在那里给出了一个不错的答案。