如何将 URL 字符串传递到 jQuery $.each 循环中的服务器端单击处理程序?

发布于 2024-10-03 13:18:13 字数 843 浏览 4 评论 0原文

我的客户端脚本中有 url 值。在循环它们时,我想创建链接,将这些 URL 值单击传递回我的服务器端单击处理程序。服务器端代码 (/logclick) 会记录点击的时间和目的地,以便在用户被定向到作为参数传递给的 URL 位置之前进行审核/logclick 服务器端处理程序。

$.each(data.items, function(i, item) 
{
        $('#link').append("<a href='" + item.url + "'></a>");
});

问题是如何编写链接,以便“虚拟链接”将目标 URL 传递到服务器端代码,而不会将目标 URL 误解为“虚拟链接”的一部分?

我的意思是,如果“虚拟链接”看起来像这样:

/logclick/http://www.google.com/reader/view/subscription/a

那么服务器端代码会抱怨它无法识别这个目的地(它会认为 google.com 目的地是 的一部分/logclick url-route 而不是传递给 /logclick 路由的字符串值

但是,在 jQuery 的上下文中 。 $.each 循环,如何创建将 POST 值发送到 /logclick 处理程序而不是 的 URL >获取?

I have url values in my client-side script. While looping over them, I want to create links that will pass these URL values on-click back to my server-side click handler. The server-side code (/logclick) records the time and destination of the click for audit purposes before the user is directed to the url location that was passed as a parameter to the /logclick server-side handler.

$.each(data.items, function(i, item) 
{
        $('#link').append("<a href='" + item.url + "'></a>");
});

The question is how to write the link so that the "virtual link" passes the destination URL to the server-side code without misinterpreting the destination URL as part of the "virtual link"?

What I mean is, if the "virtual link" looks like this:

/logclick/http://www.google.com/reader/view/subscription/a

then the server-side code will complain that it doesn't recognize this destination (it will think the google.com destination is part of the /logclick url-route instead of a string value that is being passed to the /logclick route.

But, in the context of a jQuery $.each loop, how would I create URLs that POST values to the /logclick handler rather than GET?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

待天淡蓝洁白时 2024-10-10 13:18:13

我不确定您的服务器端框架正在做什么,但您可能需要对 URL 的该部分进行编码。

$('#link').append("<a href='" + encodeURIComponent(item.url) + "'></a>");

I'm not sure what your server-side framework is doing, but you may need to encode that part of the URL.

$('#link').append("<a href='" + encodeURIComponent(item.url) + "'></a>");
鲜肉鲜肉永远不皱 2024-10-10 13:18:13

但是,在 jQuery $.each 循环的上下文中,我如何创建将值 POST 到 /logclick 处理程序而不是 GET 的 URL?

为了发送 POST 请求,您需要使用现有的 FORM 元素。

<form id="my-post-form" method="post" action="/uri-router/">
<input type="hidden" name="item-url" value="" /></form>

...

$.each(data.items, function(i, item)
{
     var link = $("<a />");
     link.attr('href', item.url).click(function(){
        $('#my-post-form input[name=item-url]').val($(this).attr('href'));
        $('#my-post-form')[0].submit();
        return false; 
     });
     $('#link').append(link);
});

But, in the context of a jQuery $.each loop, how would I create URLs that POST values to the /logclick handler rather than GET?

In order to send a POST request you need to use existing FORM element for that.

<form id="my-post-form" method="post" action="/uri-router/">
<input type="hidden" name="item-url" value="" /></form>

...

$.each(data.items, function(i, item)
{
     var link = $("<a />");
     link.attr('href', item.url).click(function(){
        $('#my-post-form input[name=item-url]').val($(this).attr('href'));
        $('#my-post-form')[0].submit();
        return false; 
     });
     $('#link').append(link);
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文