最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - x-editable - run code after successful POST? - Stack Overflow

programmeradmin3浏览0评论

I recently added x-editable functionality to my django project. I have it working to populate a bobox and submit my selection. It saves to the database, all working great. However I have a div i would like to update on successful submit/POST.

With the source: line below i can specify what happens after successful GET of the bobox values. (success: function(data)....etc)

I cannot figure out how to do the same after a successful POST.

Javascript (with some django mixed in):

$('#issueResponse').editable({
        disabled: true,
        type: 'select',
        url: '../ajax/post/issueresponse',
        params: {
                csrfmiddlewaretoken: '{{ csrf_token }}',
                },
        pk: {{ issue_obj.pk }},
        {% if issue_obj.fk_issueresponseTypeName.id == null %}
            //Do nothing
            //Do not include value: variable if existing value is set!
        {% else %}
            value: {{ issue_obj.fk_issueresponseTypeName.id }}, //value = the default value (id) of the bobox
        {% endif %}  
        showbuttons: true,

    source: function() {
        var result;
        $.ajax({
            url: '../ajax/get/responses',
            //data: {t: 'zone'},
            type: 'GET',
            global: false,
            async: false,
            dataType: 'json',
            success: function(data) {
                result = data;
                //$( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" );
            }
        });
        return result;
    },
});

I have confirmed that $( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" works via a button (to refresh a specified 'div'). I have also added it into the source: -> success: area and it works as expected (in code snippet above but mented out). However of course I would like it to refresh after a successful POST by x-editable.

I have tried variations of the following:

  • The below code added under showbuttons: true,

success: function(data, config) { $( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" },

  • The below code expanded against url: as i thought it might follow similar approach to source:,`

    url: function() {
        var result;
        $.ajax({
            url: '../ajax/post/issueresponse',
            //data: {t: 'zone'},
            type: 'POST',
            global: false,
            async: false,
            dataType: 'json',
            success: function(data) {
                $( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" );
            }
        });
        return result;
    },
    

Neither have worked. Any suggestions?

===== The code below includes the solution by BabyAzerty ====

Response corresponds to <div id="Response"> you would have your html

$('#issueResponse').editable({
        disabled: true,
        type: 'select',
        url: '../ajax/post/issueresponse',
        success: function(response, newValue) {
                          $( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" );
                          },
        params: {
                csrfmiddlewaretoken: '{{ csrf_token }}',
                },
        pk: {{ issue_obj.pk }},
        {% if issue_obj.fk_issueresponseTypeName.id == null %}
            //Do nothing
            //Do not include value: variable if existing value is set!
        {% else %}
            value: {{ issue_obj.fk_issueresponseTypeName.id }}, //value = the default value (id) of the bobox
        {% endif %}  
        showbuttons: true,

    source: function() {
        var result;
        $.ajax({
            url: '../ajax/get/responses',
            //data: {t: 'zone'},
            type: 'GET',
            global: false,
            async: false,
            dataType: 'json',
            success: function(data) {
                result = data;
                //$( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" );
            }
        });
        return result;
    },
});

I recently added x-editable functionality to my django project. I have it working to populate a bobox and submit my selection. It saves to the database, all working great. However I have a div i would like to update on successful submit/POST.

With the source: line below i can specify what happens after successful GET of the bobox values. (success: function(data)....etc)

I cannot figure out how to do the same after a successful POST.

Javascript (with some django mixed in):

$('#issueResponse').editable({
        disabled: true,
        type: 'select',
        url: '../ajax/post/issueresponse',
        params: {
                csrfmiddlewaretoken: '{{ csrf_token }}',
                },
        pk: {{ issue_obj.pk }},
        {% if issue_obj.fk_issueresponseTypeName.id == null %}
            //Do nothing
            //Do not include value: variable if existing value is set!
        {% else %}
            value: {{ issue_obj.fk_issueresponseTypeName.id }}, //value = the default value (id) of the bobox
        {% endif %}  
        showbuttons: true,

    source: function() {
        var result;
        $.ajax({
            url: '../ajax/get/responses',
            //data: {t: 'zone'},
            type: 'GET',
            global: false,
            async: false,
            dataType: 'json',
            success: function(data) {
                result = data;
                //$( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" );
            }
        });
        return result;
    },
});

I have confirmed that $( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" works via a button (to refresh a specified 'div'). I have also added it into the source: -> success: area and it works as expected (in code snippet above but mented out). However of course I would like it to refresh after a successful POST by x-editable.

I have tried variations of the following:

  • The below code added under showbuttons: true,

success: function(data, config) { $( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" },

  • The below code expanded against url: as i thought it might follow similar approach to source:,`

    url: function() {
        var result;
        $.ajax({
            url: '../ajax/post/issueresponse',
            //data: {t: 'zone'},
            type: 'POST',
            global: false,
            async: false,
            dataType: 'json',
            success: function(data) {
                $( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" );
            }
        });
        return result;
    },
    

Neither have worked. Any suggestions?

===== The code below includes the solution by BabyAzerty ====

Response corresponds to <div id="Response"> you would have your html

$('#issueResponse').editable({
        disabled: true,
        type: 'select',
        url: '../ajax/post/issueresponse',
        success: function(response, newValue) {
                          $( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" );
                          },
        params: {
                csrfmiddlewaretoken: '{{ csrf_token }}',
                },
        pk: {{ issue_obj.pk }},
        {% if issue_obj.fk_issueresponseTypeName.id == null %}
            //Do nothing
            //Do not include value: variable if existing value is set!
        {% else %}
            value: {{ issue_obj.fk_issueresponseTypeName.id }}, //value = the default value (id) of the bobox
        {% endif %}  
        showbuttons: true,

    source: function() {
        var result;
        $.ajax({
            url: '../ajax/get/responses',
            //data: {t: 'zone'},
            type: 'GET',
            global: false,
            async: false,
            dataType: 'json',
            success: function(data) {
                result = data;
                //$( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" );
            }
        });
        return result;
    },
});
Share Improve this question edited May 14, 2014 at 0:20 James asked May 4, 2014 at 0:37 JamesJames 8651 gold badge13 silver badges26 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 8

Use the success param of X-Editable

$('#issueResponse').editable({
    success: function(response, newValue) {
        $( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" );
    }
});

Or you can add an event trigger

$('#issueResponse').on('save', function(e, params) {
    alert('Saved value: ' + params.newValue);
    $( "#Response" ).load( "../ajax/get/{{issue_obj.id}}/response/" );
});
发布评论

评论列表(0)

  1. 暂无评论