0

全部 -

我试图实现的功能如下

我在页面上有一个链接。每次点击链接,href 属性都必须改变。例如,链接将以 href 值开头

<a href="www.google.com">Click Me</a>

对于第二次点击,它应该更改为 www.yahoo.com,第三次点击,返回 www.google.com,依此类推。对于一个用户,我在 jquery 中编写了以下代码

 $(".clickMe").bind("click", function(e){
  e.preventDefault();
  var currURL = $(this).attr("href");
  console.log($(this));
  if(currURL === 'www.google.com') {
    $(this).attr("href","www.yahoo.com");
    currURL = "www.yahoo.com";
  } else {
    $(this).attr("href","www.google.com");
    currURL = "www.google.com";
  }

  window.location = currURL;
});

如何在多个用户之间交替 URL?如果第一个用户点击链接,href 应该指向 www.google.com,对于第二个用户,它应该指向 www.yahoo.com 等。

4

5 回答 5

4

我认为您处理此问题的最佳方法是在服务器端,而不是客户端。

您可以执行以下操作:

让所有链接都转到相同的 URL/页面

确定第一个用户应该被发送到哪里的参数和应用程序变量 -

<cflock timeout = "60" scope = "application" type = "Exclusive">
<cfparam name="application.url" default="http://google.com" />
</cflock>

使用获取该 URL 的逻辑,然后将其更改为新 URL 以进行下一个请求 -

<cfset myURl = application.url /> 
<cflock timeout = "60" scope = "application" type = "Exclusive">
<cfif myUrl EQ 'http://google./com'>
  <cfset application.url = 'http://yahoo.com' />
<cfelse>
  <cfset application.url = 'http://google.com' />
</cflock>

最后,用于cflocation重定向用户

<cflocation url="#myurl#" addToekn="false" />

如果您使用的是 ColdFusion 9 或更高版本,则可以使用 ternaty 运算符代替if/else.

<cfset application.url = myUrl EQ 'http://google./com' ? 'http://yahoo.com' : 'http://google./com' />
于 2013-08-05T15:43:12.303 回答
2

仅使用客户端 javascript 是无法做到的。您必须对服务器或 websocket 使用 Ajax 查询。

这是一个非常简单的示例(这当然不是最好的示例,但我保持简单以使其易于理解)

客户端(此处带有完整小提琴的 JS:http: //jsfiddle.net/DxNxj/1):

function manageURL(updateServer){
  jQuery.ajax({
    type: 'GET',
    url: 'index.php'
    data: {
        action: (updateServer) ? 'setNextURL' : 'getNextURL'
    }, 
    success: function(data, textStatus, jqXHR) {
        $("#url").html(data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log("Can't retrieve URL");
    }
  });
}

服务器端(PHP):

<?php
if(isset($_GET['action']){
    if($_GET['action'] == 'getNextURL'){
        echo getURL();
    else if($_GET['action'] == 'setNextURL'){
        echo getURL(true);
    }
}

function getURL($next = false){
    $url = file_get_contents('url.txt');
    if($next){
        switch($url){
            case "http://google.fr":
                $url = "http://yahoo.com";
                break;
            case "http://yahoo.com":
                $url = "http://google.fr";
                break;
        }
        file_put_contents('url.txt', $url);
    }
    return $url;
}

?>
于 2013-08-05T14:23:27.543 回答
1

这在 Javascript 中是不可能的,因为 JS 在用户浏览器中运行,并且与其他用户的浏览器没有任何链接。一个选项可能是不直接链接到 URL,而是将用户重定向到“选择器脚本”(php 或其他)。然后做这样的事情(php示例):

$x = 'google.com';
$y = 'google.com';
$last_url = ''; // get it from a database or file or whatever
if($last_url == $x) {
    $redirect_url = $y;
} else {
    $redirect_url = $x;
}
update_last_url($redirect_url);
header('Location: '. $redirect_url;
于 2013-08-05T14:24:11.027 回答
1

演示

(function($) {
    $.fn.clickToggle = function(func1, func2) {
        var funcs = [func1, func2];
        this.data('toggleclicked', 0);
        this.click(function() {
            var data = $(this).data();
            var tc = data.toggleclicked;
            $.proxy(funcs[tc], this)();
            data.toggleclicked = (tc + 1) % 2;
        });
        return this;
    };
}(jQuery));
$('#click_me').clickToggle(function(){
    $(this).attr("href","http://www.google.com");
},function(){
    $(this).attr("href","http://www.yahoo.com");
});

它只能通过 ajax 完成,如果用户单击链接更新每个用户的链接,我们将不得不继续检查每个用户。

于 2013-08-05T14:36:39.430 回答
0

我不知道您如何识别第二个用户。

无论如何,我正在使用 jquery 的切换功能。

请在此处找到带有示例的更新脚本

谢谢

于 2013-08-05T14:31:00.563 回答