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

时间:2012-01-12 19:59:23

标签: javascript coldfusion

我正在查看cfhttp标签,可以使用它通过点击链接传递变量吗?

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

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

2 个答案:

答案 0 :(得分:1)

我的原始答案完全错过了标记,但我无法删除已接受的答案,因此为了清楚起见,我将更改此答案以同意上述Billy的评论。

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

您要求的内容似乎是完全不相关的功能,其中包括:

  1. 您的网页上有一个HTML锚点(超链接)。
  2. 当用户点击该链接时,您希望将一个或多个变量传递给新页面。
  3. 实现此目的的最简单方法是使用隐藏的表单,然后提交超链接提交表单。这符合比利在你的问题评论中的建议:

    <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”页面,在这些页面中可以使用它们继续处理。

答案 1 :(得分:1)

如果您不想将变量发送回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将该表单提交到脚本指向的相同基本href。这是一个工作小提琴:http://jsfiddle.net/VGaPH/