Uncaught TypeError: Cannot read property 'document' of undefined

36,011

Solution 1

Are popups enabled on that PC's Chrome? If they're not then the new window cannot be created hence win is undefined

Solution 2

This is because when you try to create a pop-up after the success of asynchronous ajax request win get undefined. So you can add async:false as follows this is works for me:

function viewReport() {
    console.info('generating event report');
    var frmData = $('#frmEventReport').serializeArray();
    var rptName = 'EventReport' + Math.floor((Math.random() * 100) + 1);
    console.info('generated random report name ' + rptName);
    $.ajax({
        //type: "GET",
        timeout: 120000,
        url: '@Url.Action("EventReport", "Reports")',
        data: frmData,
        async:false,
        success: function (data) {
            console.info('succesfully called back');
            var win = window.open('', rptName, '_blank');
            console.info('opening window');
            win.document.write(data);

        },
        error: function (x, y, z) {
            console.info(x + ' ' + y + ' ' + z);
        }
    });
}
Share:
36,011
Null Reference
Author by

Null Reference

N.A

Updated on July 05, 2022

Comments

  • Null Reference
    Null Reference almost 2 years

    I have the following function, which works fine on a few PCs that I've tested on. I've tested this on Chrome, IE & Firefox with no issues. However, there's 1 particular PC (running Chrome), that throws this error "Uncaught TypeError: Cannot read property 'document' of undefined" on the line:

                    win.document.write(data);
    

    Could it be because win is null?

    If so, why is this the case on this particular PC?

    Is there some Chrome settings that needs to be set?

    Method:

        function viewReport() {
            console.info('generating event report');
            var frmData = $('#frmEventReport').serializeArray();
            var rptName = 'EventReport' + Math.floor((Math.random() * 100) + 1);
            console.info('generated random report name ' + rptName);
            $.ajax({
                //type: "GET",
                timeout: 120000,
                url: '@Url.Action("EventReport", "Reports")',
                data: frmData,
                success: function (data) {
                    console.info('succesfully called back');
                    var win = window.open('', rptName, '_blank');
                    console.info('opening window');
                    win.document.write(data);
    
                },
                error: function (x, y, z) {
                    console.info(x + ' ' + y + ' ' + z);
                }
            });
        }
    
  • Null Reference
    Null Reference over 10 years
    Ah, yes, this is cause!