从一个HTML页面传递变量的最佳实践是什么?

6
我是一个相对较新的网络应用程序员,所以希望我的问题不会太基础。我创建了一个包含一个dojox datagrid(v1.2)的FORM的HTML页面,其中填充了不同杂货商品的描述行。用户选择感兴趣的项目后,将单击“提交”按钮。此时,我可以让javascript函数将项目ID号存储为javascript变量,但我不知道如何将此ID传递到后续的HTML页面。我应该只将ID作为URL查询字符串参数传递吗?还有其他更好的方法吗?编辑:整个过程就像购物车一样。用户将从网格中选择项目,然后在下一页上填写一些详细信息,然后结账。我还应该提到,我正在使用grails,因此这是在GSP页面中发生的,但目前它仅包含HTML。

你想要完成的整个流程是什么? - Pistos
7个回答

4
您可以使用隐藏的输入字段,该字段将作为表单的一部分进行传输。
<html>
  <head>
  </head>
  <body>
    <script type="text/javascript">
      function updateSelectedItemId() {
        document.myForm.selectedItemId.value = 2;
        alert(document.myForm.selectedItemId.value);

       // For you this would place the selected item id in the hidden
       // field in stead of 2, and submit the form in stead of alert
      }
    </script>

    Your grid comes here; it need not be in the form

    <form name="myForm">
      <input type="hidden" name="selectedItemId" value="XXX">
      The submit button must be in the form.
      <input type="button" value="changeSelectedItem" onClick="updateSelectedItemId()">
    </form>
  </body>
</html>

忘了说,调用document.myForm.submit()的按钮也可能不在表单中。只有type=submit的按钮必须在表单本身中。 - extraneon
谢谢大家!我会采用这个解决方案,因为它运行良好,易于实现且直接明了。 - Kevin

2

这个方法不错,但更好的做法是使用一些脚本语言,比如JSP、PHP、ASP等,并且你可以使用简单的POST和GET方法。


2

我认为最好的方法是将其包含在URL中

href="http://NewPage.htm?var=value";

使用encodeUriComponent对字符串值进行编码


1

使用POST方法将变量发送到另一个页面的一种方法是将链接到后续页面的提交输入作为表单上的操作属性,其中操作属性是您的目标页面。对于每个变量,您可以在此表单中使用属性类型为“hidden”的输入来包含它们,仅使按钮可见。

另一种选择是在页面上使用类似PHP的动态生成链接的方式,基本上重新填充当前GET查询。

最后,您始终可以将此信息存储在PHP $_SESSION数组中,而不必担心通过站点导航不断传递这些变量。

您的选择将取决于您希望保留相同变量的导航选项数量。它还将取决于您希望后端有多安全以及您希望向高级Web用户披露的数量。


1
如果您只需要在后续页面上使用ID,则可以将ID作为查询字符串参数传递。
但是,有时您需要传递更多信息,并且传递各种参数到不同的页面并且需要维护不同页面的不同参数集可能会变得有点棘手。在这种情况下,建议您在表单上保留一个隐藏字段并创建一个参数对象来存储每个参数。使用JSON序列化参数对象并将其存储在隐藏字段中。将表单提交回服务器。当下一页加载时,反序列化对象并检索所需的值。

0

假设您只能使用HTML页面,我认为最好的方法是将ID作为查询字符串传递到下一个页面。在下一个页面上从查询字符串中获取该值相对容易。如果您需要更加隐秘地传递变量(或者需要变量持续存在于多个页面),您还可以设置一个cookie并在下一个页面上检索它。


0

由于您正在尝试在Grails应用程序中执行此操作,因此您可以选择使用Flash范围。如果您想直接从一个HTML页面转到下一个页面,则可能没有任何意义,因为该范围将在控制器中定义。如果您不需要在请求之间执行任何处理,我建议使用隐藏的表单字段来保持简单。

http://grails.org/Controllers+-+Controller+Scopes


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接