如何使用带有jQuery切换按钮的ajax调用

如何使用带有jQuery切换按钮的ajax调用,jquery,ajax,onclick,jsonp,openerp,Jquery,Ajax,Onclick,Jsonp,Openerp,我正在使用OpenERP odoo模块 其中的切换按钮用于在单击时显示“发布”“取消发布”。 每次单击都有一些后台进程,使用json rpc获取数据 我想在后台处理期间.hide()此切换按钮[短:我不想立即切换此按钮] ​ $(document).on('click', '.js_publish_management .js_publish_btn', function () { var $data = $(this).parents(".js_publi

我正在使用OpenERP odoo模块

其中的切换按钮用于在单击时显示“发布”“取消发布”。 每次单击都有一些后台进程,使用json rpc获取数据

我想在后台处理期间
.hide()
此切换按钮[短:我不想立即切换此按钮]

​        $(document).on('click', '.js_publish_management .js_publish_btn', function () {
            var $data = $(this).parents(".js_publish_management:first");
            var self=this;
            openerp.jsonRpc($data.data('controller') || '/website/publish', 'call', {'id': +$data.data('id'), 'object': $data.data('object')})
                .then(function (result) {
                    $data.toggleClass("css_unpublished css_published");
                    $data.parents("[data-publish]").attr("data-publish", +result ? 'on' : 'off');
                }).fail(function (err, data) {
                    website.error(data, '/web#return_label=Website&model='+$data.data('object')+'&id='+$data.data('id'));
                });
        });

我不熟悉Ajax调用。谁能指引我!TIA.

在元素的函数调用
.hide()
的第一行。然后在ajax调用中添加
.always()
函数来显示它:

 $(document).on('click', '.js_publish_management .js_publish_btn', function () {
     var $data = $(this).parents(".js_publish_management:first");
     var self=this;

     //hide your element here
     element.hide();

     openerp.jsonRpc($data.data('controller') || '/website/publish', 'call', {'id': +$data.data('id'), 'object': $data.data('object')})
         .then(function (result) {
         $data.toggleClass("css_unpublished css_published");
         $data.parents("[data-publish]").attr("data-publish", +result ? 'on' : 'off');
         }).fail(function (err, data) {
             website.error(data, '/web#return_label=Website&model='+$data.data('object')+'&id='+$data.data('id'));
         }).always(function(){
             //show your element again. Once the call is resolved either way
             element.show();
         });
    });

您可以尝试使用bootstrap ready类来显示“loading..”状态,而不是

。始终是ajax还是jQuery函数?仅仅要求知识,我不能像我提到的那样,用成功和错误的方法来处理这个问题吗。。这就是为什么我问
。always()
是jquery。是的,您可以将
元素.show()
添加到success和error方法中。谢谢@craicerjack它正确吗??$。ajax({url:'/website/publish',{success:function(data){$('.btn group').show();},error:function(){$('.btn group').hide();}@testerr是正确的,除了你想在两个函数中都显示按钮外。至少我认为你是这样做的。你在单击按钮后隐藏按钮,然后在解决后显示它。如果你不在错误函数中显示它,那么如果ajax中有错误,它将永远消失。
$.ajax({url:'/website/publish',{success:function(数据){$('.btn group').show();},错误:function(){$('.btn group').show();}
我不能像我提到的那样,用success and error方法处理这个问题。。这就是我问的原因
            $('.btn-group').ready( function () {
                $('.btn-group').button('loading');
                openerp.jsonRpc($data.data('controller') || '/website/publish', 'call', {'id': +$data.data('id'), 'object': $data.data('object')})
                    .then(function (result) {
                        $data.toggleClass("css_unpublished css_published");
                        //do something
                        $('.btn-group').button('reset');
                    }).fail(function (err, data) {
                        //do something
                        $('.btn-group').button('reset');
                    });
            });