cfhttp通过单击的链接传递POST变量

cfhttp Passing POST variables via a link that is clicked?

本文关键字:POST 变量 链接 单击 cfhttp      更新时间:2023-09-26

我正在查看cfhttp标记,是否可以使用它通过单击链接传递变量?

<cfhttp method="Post" url="myurl"> 

我试图在点击链接时传递变量(例如,用户ID),但通过GET发送似乎有点不安全。。。

我最初的答案完全没有切中要害,但我无法删除已接受的答案,因此为了清晰起见,我将更改此答案,以同意Billy的上述评论。

CFHTTP用于向另一个网站发出服务器端请求(就像你自己访问该网站一样),处理该请求的结果,并将其存储在一个变量中,然后你可以使用该变量执行其他任务(例如,解析网站主页以获取特定值)。

你所要求的似乎是一个完全无关的功能,其中:

  1. 您的页面上有一个HTML锚(超链接)
  2. 当用户单击该链接时,您希望将一个或多个变量传递到新页面

实现这一点的最简单方法是使用隐藏表单,然后让超链接提交表单。这与Billy在问题评论中的建议相匹配:

<form name="myForm" method="post" action="pageToSendVarsTo.cfm">
  <input type="hidden" name="username" value="theuser" />
  <input type="hidden" name="id" value="42" />
</form>
<a href="#" onClick="document.myForm.submit();">the link to click</a>

在这里,您有一个HTML表单,其中有两个隐藏字段,用户名和id,它们不会显示在页面上,因为它们是隐藏的(但请注意,如果用户查看页面的源代码,仍然可以查看)。接下来,"要单击的链接"会以超链接的形式显示给用户。单击时,JavaScript用于模拟表单提交的触发;它的行为本质上就像表单有一个提交按钮,用户单击了该提交按钮。对于这个例子的表单来说,这意味着用户名和id值都会被HTTP张贴到你的"pageToSendVarsTo.cfm"页面,在那里它们可以在form范围内继续处理。

如果您不想将变量发送回CF来执行POST,您也可以使用一些JavaScript魔法来完成此操作。例如:

<a class="postLink" href="foo.cfm?var1=a&var2=b">Click Me</a>

现在,假设您想请求foo.cfm作为POST,并将var1和var2作为POST变量传递(假设jQuery):

<script>
$(function () {
   $(document).on('click', 'a.postLink', function (e) {
     e.preventDefault();
     var newForm = $("<form method='POST'></form>");
     if ($(this).attr('href').indexOf('?') != -1)
     {
       newForm.attr("method", $(this).attr('href').substring(0, $(this).attr('href').indexOf('?')));
       var post_args = $(this).attr('href').substring($(this).attr('href').indexOf('?')+1, $(this).attr('href').length).split('&');
       for (var i in post_args)
       {
         var keyVal = post_args[i].split('=');
           newForm.append($("<input>", { type: "hidden", name:keyVal[0], value:keyVal[1] }));
       }
     }
     else
     {
       newForm.attr("method", $(this).attr('href'));
     }
     console.log(newForm);
     newForm.submit();
   });
});
</script>

这将停止对所有用类"postLink"标记的链接的正常处理,并且将使用从链接URL中解析出的参数构建一个新的表单对象,而不是转到该页面,该参数包含在表单参数中。然后,它将使用POST将该表单提交到脚本指向的同一个基hrefhttp://jsfiddle.net/VGaPH/