2

我的 AJAX 调用有问题。我有一个带有“showuserinfo”类按钮的列表,当我点击 showuserinfo 并返回并再次点击时,AJAX 调用不止一次。如果我点击 showuserinfo,返回并再次点击,AJAX 调用会工作两次。如果我重复执行此操作,AJAX 调用也会重复运行。这是我的代码:

 $('.showuserinfo').live('tap', function(event){
        $.mobile.loading('show');
        var user_id = $(this).children().find('a').attr('id');
        //$('#showprofile').page('destroy').page();
        $('#showprofileImage img').remove();
        $('#showprofileContent div').remove();
        $( document ).delegate("#showprofile", "pagebeforeshow", function() {
         $.ajax({
            type: "POST",
            url: "http://fitness.desigyn.com/func/phonegapApi.php",
            data: { operation: "getSpecificProfile", requested: user_id ,username: 'kurekcifuat', password: '123456' },
            async : false,
            cache : false,
            }).done(function( msg ) {
                if(msg == "fail")
                {
                    alert('error');
                }
                else{
                    var obj = $.parseJSON(msg);
                        alert(msg); // Debugging and that code works more than once
                    $('#showprofileImage img').remove();
                    $('#showprofileContent div').remove();
                    $('#showprofileImage').append('<img class="otheruserpic" style="height:120px !important; width:120px !important;" src="' + obj["0"].picture + '"/>');
                    $('#showprofileContent').append('<div class="otheruserinfo"><b>Username: </b><span>' + obj["0"].username + '</span></div><div><b>Name: </b><span>' + obj["0"].name + '</span></div><div><b>Age: </b><span>' + obj["0"].age + '</span></div><div><b>Gender: </b><span>' + obj["0"].gender + '</span></div>');
                }
            });
            $.mobile.loading('hide');
         });

        });

有什么建议么?干杯。

4

2 回答 2

4

您有多个事件绑定的问题。

改变这个:

$('.showuserinfo').live('tap', function(event){

});

对此:

$('.showuserinfo').die('tap').live('tap', function(event){

});

甚至更好地使用这样的:

$(document).off('tap', '.showuserinfo').on('tap', '.showuserinfo' ,function(event){

});

在此处阅读有关多事件绑定的更多信息,搜索章节:防止多事件绑定/触发

于 2013-06-05T17:12:21.393 回答
3

首先,.ready()不推荐使用 jQuery Mobile。其次,.live()替换为.on().

您的 Ajax 请求在触发时被触发两次pagebeforeshow。为避免这种情况,请执行以下操作。

首先,修复.live().

$(document).on('tap', '.showuserinfo', function(event) { });

然后使用下面的来杀死任何以前的绑定pagebeforeshow

$(document).off("pagebeforeshow", "#showprofile").on("pagebeforeshow", "#showprofile", function () { });
于 2013-06-05T17:19:35.193 回答