未捕获的TypeError:无法读取未定义的属性“文档”

时间:2013-12-27 09:16:16

标签: javascript .net asp.net-mvc dom browser

我有以下功能,可以在我测试的几台PC上正常工作。我在Chrome,IE& Firefox没有问题。但是,有一个特定的PC(运行Chrome),它会抛出此错误“Uncaught TypeError:无法读取未定义的属性'文档'”:

                win.document.write(data);

可能是因为胜利是空的吗?

如果是这样,为什么这台PC会出现这种情况?

是否需要设置一些Chrome设置?

方法:

    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);
            }
        });
    }

3 个答案:

答案 0 :(得分:15)

该PC的Chrome上是否启用了弹出式窗口?如果不是,则无法创建新窗口,因此winundefined

答案 1 :(得分:0)

出现此错误是因为系统中禁用了弹出式窗口。因此请通过系统的设置选项启用弹出式窗口。

答案 2 :(得分:0)

这是因为在异步ajax请求成功完成后尝试创建弹出窗口时,win得到undefined。因此,您可以添加async:false,如下所示:

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);
        }
    });
}