Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object doesn't support property or method 'save'

Tags:

javascript

I am getting error while calling reportManager.save("/EditInitiatives.svc/SaveGridData"); method

<script type='text/javascript'>
$(function () {
    $('#saveReport, #save-report-bottom').click(function () {
        $.blockUI({ message: '<h4><img src="/Images/busy.gif" /> Saving your changes.<br/>This operation might impact several reports at once.<br/>Please be patient.</h4>' });
        uiController.disableSaveButton();
        reportManager.save("/EditInitiatives.svc/SaveGridData");
    });

    var reportManager = function () {
        var tableData = JSON.stringify(handsontable.getData());
        var input = JSON.stringify({ "input": tableData });
        alert("Data" +  input); 

        save = function(saveUrl) { 
            alert("save" + saveUrl);

            $.ajax({
                url: saveUrl,
                type: 'POST',
                dataType: 'json',
                data: input, //returns all cells' data
                contentType: 'application/json; charset=utf-8',
                success: function(res) {
                    if (res.result === 'ok') {
                        console.text('Data saved');
                    }                        
                    $.unblockUI();                            
                }, 
                error: function (xhr) {
                    alert(xhr.responseText);
                }                       
            });
        }
    };
}
</script>
like image 420
James123 Avatar asked Nov 30 '25 15:11

James123


1 Answers

You can not access it since save is a Global variable and not part of reportManager.

The reason why it is global is because you are missing the var in front of the variable. That puts it into the Global Namespace. It will not magically be hooked up to the block scope of the function. You would need to use an OO approach to get that to work. Some basic ideas are

function Report() {
     var x = 1;
    this.save = function () {
        alert("First: " + x);   
    }
}

var report = new Report();
report.save();


function report_2() {
     var x = 1;
    return {
        save : function () {
            alert("Second: " + x);   
        }
    }
}

var report2 = report_2();
report2.save();


var report_3 = (function () {
     var x = 1;

    var returnObj = {};
    returnObj.save = function () {
            alert("Third: " + x);   
    }

    return returnObj;


    //return {
    //    save  :  function() {
    //        alert("Third: " + x);   
    //    }
    //}
})();

report_3.save();

Fiddle of Examples: http://jsfiddle.net/5Zhsq/

like image 83
epascarello Avatar answered Dec 02 '25 04:12

epascarello



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!