【问题标题】:follow and unfollow using single button with jquery & ajax, by laravel controller通过 laravel 控制器使用带有 jquery 和 ajax 的单个按钮来关注和取消关注
【发布时间】:2013-12-08 10:24:13
【问题描述】:

我有两个控制器分别用于关注和取消关注。我想设计一个按钮,该按钮将在网站的许多地方使用,具有跟随 - 取消关注 - 跟随动作。

我的意思是当用户关注时,它将被声明为关注,直到悬停效果调用,否则它会说关注,当悬停时,如果已经关注或继续关注选项,则会取消关注。

这就是按钮外观的细节。现在,当我开始实施时,我可以在完成检查的地方进行单个控制器调用(通过从互联网获得一些帮助)。但我想为两个不同的动作调用两个不同的控制器。

like for follow-> {{ action('FollowsController@show', 'id'); }} 

取消关注

{{ action('FollowsController@destroy', 'id'); }}

这里显示的是 post 方法,destroy 有删除操作。

在这里,我在代码中提供了完整的操作:尽管这段代码并没有给出我想要的东西。

<script type="text/javascript">
//Changes the Following text to Unfollow when mouseover the button 
$(document).ready(function()
{
    $('.following').hover(function()
    {
        $(this).text("Unfollow");
    },function()
    {
        $(this).text("Following");
    });
 });

 //Perform the Following and Unfollowing work
function follow_or_unfollow(id,action)
{
    var dataString = "id=" + id;
    $.ajax({  
        type: "POST",  
        url: "{{ action('FollowsController@show', 'id'); }}",  
        data: dataString,
        beforeSend: function() 
        {
            if ( action == "following" )
            {
                $("#following"+id).hide();
                $("#loading"+id).html('<img src="loading.gif" align="absmiddle" alt="Loading...">');
            }
            else if ( action == "follow" )
            {
                $("#follow"+id).hide();
                $("#loading"+id).html('<img src="loading.gif" align="absmiddle" alt="Loading...">');
            }
            else { }
        },  
        success: function(response)
        {
            if ( action == "following" ){
                $("#loading"+id).html('');
                $("#follow"+id).show();

            }
            else if ( action == "follow" ){
                $("#loading"+id).html('');
                $("#following"+id).show();
            }
            else { }
        }
    }); 
}
</script>

            @if(0)

            <span id="loading {{ $topdebater->id }}"></span>
            <button class="btn btn-lg btn-danger button following" id="following {{ $topdebater->id }}" onClick="follow_or_unfollow({{ $topdebater->id }},'following');">Following</button>

            <span style="display:none;" class="btn btn-lg button follow" id="follow {{ $topdebater->id }} ?>" onClick="follow_or_unfollow({{ $topdebater->id }},'follow');">Follow</span>

            @else

            <span id="loading{{ $topdebater->id }}"></span>
            <button class="btn btn-info button follow" id="follow{{ $topdebater->id }}" onClick="follow_or_unfollow({{ $topdebater->id }},'follow');">Follow</button>

            <span style="display:none;" class="button following" id="followingfollow{{ $topdebater->id }}" onClick="follow_or_unfollow(follow{{ $topdebater->id }},'following');">Following</span>

            @endif

我是 ajax 的新手。虽然努力学习。我需要你支持这项研究。提前致谢。

【问题讨论】:

  • 关注和取消关注时使用相同的操作 URL。控制器的 show-function 是否负责区分这两个动作?
  • 先生,此代码仅适用于我检查用户是否在关注的单个控制器并相应地采取措施。但在新情况下,我希望它从 ajax 决策中调用两个不同的控制器。请帮帮我,先生。

标签: ajax jquery laravel laravel-4


【解决方案1】:

你已经尝试过这样的事情了吗?

function follow_or_unfollow(id,action)
{
    if ( action == "following" ){ // I'm not sure for the condition, it depends of its meaning.
        myUrl = "{{ action('FollowsController@show', 'id') }}" ;
        myMethod = "GET";
    } else {
        myUrl = "{{ action('FollowsController@destroy', 'id') }}" ;
        myMethod = "DELETE";
    }
    var dataString = "id=" + id;
    $.ajax({  
        type: myMethod ,  
        url: myUrl,  
        data: dataString,

        // The remaining code...

它不起作用,但给我生成的 URL。然后我们要根据the documentation让它们对应到控制器表。

我认为 HTTP 删除方法会是一个问题,但我希望它可以通过参数绕过(比如表单)。 EDIT : finally DELETE method works directly

【讨论】:

  • 嘿兄弟谢谢你的回复!是的,这部分看起来很有希望。但是按钮将相应更改的视图呢?我的意思是当它从销毁控制器返回时,如何重新获得关注按钮?
  • 更新视图你的javascript成功函数是一个好的开始。你的销毁控制器必须回显一个返回值,你会收到一个返回值到 javascript response 变量中,以检查一切是否成功,然后替换或不替换关注按钮。
  • 此时我需要在写为'id'的地方打印id的值,但无法管理。我只需要知道如何将该 id 字符串作为值。
  • 您是在谈论动作函数中的 id(这是服务器端执行的,所以我认为如果您有超过 1 个可遵循的内容,则不能像这样使用它)还是在 javascript 函数中?
  • 假设我有id = 2 然后我想要myUrl = "{{ action('FollowsController@show', 2) }}" ;' ------ instead of myUrl = "{{ action('FollowsController@show', 'id') }}" ;` 更多click me-1 和@ 987654324@
【解决方案2】:

部分发现了问题的解决方案。但还有很长的路要走。 控制器中显示方法的第一次执行可以通过转到获取控制器本身的特定页面的链接来完成....

like if {{ action('FollowsController@destroy', 'id') }} 获取这样的链接 http://localhost/blabla/id

那么我们必须获取

 if( action == "follow" ) {
        myUrl = "http://localhost/blabla/"+id;
        myMethod = "GET";
    }

导致js中的controller调用无法解析,需要通过js变量获取。

到此为止

但在删除方法的情况下,调用的链接是什么仍然是一个问题。当我得到那个答案时,我会尝试在这里发布....谢谢!

myUrl = "{{ action('FollowsController@destroy', 'id') }}" ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2021-10-04
    • 2018-07-21
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多