首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2具有相同对象JQuery AJAX post请求

2具有相同对象JQuery AJAX post请求
EN

Stack Overflow用户
提问于 2012-12-28 11:19:59
回答 3查看 113关注 0票数 2

确切地说,我想做的是:

代码语言:javascript
复制
<form>
    <input type="button" class="btn btn-warning" id="follow" value="Follow">  
</form>
<script type="text/javascript">

 $('#follow').click(function(){  
      $.ajax({ 
        url: '/follow'
        , type: 'POST'
        , cache: false
        , data: { user: '<%= username %>' }
        , complete: function() {


         },

        success: function(data) {

        },

        error: function() {

           console.log('process error');

        },
   });

   $('#follow').attr('value', 'Following');  
   $('#follow').attr('id', 'unfollow'); 
 });   

 $('#unfollow').click(function(){  
      $.ajax({ 
        url: '/unfollow'
        , type: 'POST'
        , cache: false
        , data: { user: '<%= username %>' }
        , complete: function() {


         },

        success: function(data) {


        },

        error: function() {

           console.log('process error');

        },
   });

   $('#follow').attr('value', 'Follow');  
   $('#follow').attr('id', 'follow'); 
 });           

</script>

第一个post请求可以很好地工作,但第二个请求就不行了。当我按下按钮时,值不会改变,也不会收到/unfollow的相应post请求。这里有什么问题?

感谢advance!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-28 11:31:06

您的事件绑定发生在DOM第一次加载时。当您动态更改ID时,不会导致绑定发生更改。您需要使用on()进行委托,这样才能正常工作。

代码语言:javascript
复制
$(".btn").on("click", "#follow", function() {...});
$(".btn").on("click", "#unfollow", function() {...});

另一种选择是不更改ID。使用单个处理程序,检查当前值是"Follow"还是"Unfollow",并调用相应的URL。

代码语言:javascript
复制
$("#follow").click(function () {
    if ($(this).val() == "Follow") {
        $(this).val("Unfollow");
        var url = "/follow";
    } else {
        $(this).val("Follow");
        var url = "/unfollow";
    }
    $.ajax( {
        url: url
        , type: 'POST'
        , cache: false
        , data: { user: '<%= username %>' }
        , complete: function() {
        },

        success: function(data) {
        },
        error: function() {
           console.log('process error');
        }
    });
});
票数 2
EN

Stack Overflow用户

发布于 2012-12-28 11:46:40

Barmar是正确的,但您也没有正确引用您的ID。

您正在查找#follow,但您已经将其更改为#unfollow :)

这里有一个你想要做的例子。

代码语言:javascript
复制
$(document).ready( function(){

   $("body").on("click", "#follow", function(){
      $(this).val("Unfollow");  
      $(this).attr("id","Unfollow"); 
   });

   $("body").on("click", "#Unfollow", function(){
      $(this).val("Follow");  
      $(this).attr("id","follow"); 
   }); 

});

here it is at Jsfiddle

票数 0
EN

Stack Overflow用户

发布于 2012-12-28 12:00:35

更改id不是一个好主意。

通过保持id不变,并在单击处理程序中测试value,可以获得正确的效果,如下所示:

代码语言:javascript
复制
$('#follow').on('click', function(){
    if(this.value == 'Follow') {
        $.ajax({
            url: '/follow',
            type: 'POST',
            cache: false,
            data: { user: '<%= username %>' },
                complete: function() {
            },
            success: function(data) {
            },
            error: function() {
                console.log('process error');
            }
        });
        $(this).attr('value', 'Following'); 
    }
    else {
        $.ajax({ 
            url: '/unfollow',
            type: 'POST',
            cache: false,
            data: { user: '<%= username %>' },
            complete: function() {
            },
            success: function(data) {
            },
            error: function() {
                console.log('process error');
            }
        });
       $(this).attr('value', 'Follow'); 
    }
});

根据成功/错误/完成函数的相似程度,您可以将其简化为一个$.ajax()块。

您可能还希望将更改#follow的值的语句移动到成功处理程序中。否则,按钮的值将至少在一段时间内说出谎言,如果发生ajax错误,则会说更长时间的谎言。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14064174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档