Ошибка Uncaught TypeError, почему появилась?
Добрый день. Есть функция для печати:
function printSticker(elem){ var mywindow = window.open('', 'PRINT', 'height=400,width=600,left=300,top=300'); mywindow.document.write(document.getElementById(elem).innerHTML); mywindow.document.close(); mywindow.focus(); mywindow.print(); mywindow.close(); return true; } Я передавал в нее id блока который нужно было печатать, все работало. Теперь же мне нужно было отправлять GET запрос на сервер, получать ответ, и вставлять ответ в блок печати. Делаю так: function getPrintPlan(){ $.getJSON('index.php', function(data) { printPlan(data[1]); }); } function printPlan(data){ //делаю свои дела, могу тут ничего не делать, ошибка остается printSticker('elem'); } function printSticker(elem){ var mywindow = window.open('', 'PRINT', 'height=400,width=600,left=300,top=300'); mywindow.document.write(document.getElementById(elem).innerHTML); mywindow.document.close(); mywindow.focus(); mywindow.print(); mywindow.close(); return true; } Выходит ошибка : Код:
Uncaught TypeError: Cannot read property 'document' of null Код:
mywindow.document.write(document.getElementById(elem).innerHTML); |
а если добавить window перед document?
mywindow.document.write(window.document.getElementById(elem).innerHTML); |
Проблема в том, что это твоё mywindow не открылось. А не открылось оно потому, что браузер не блокирует только те окна, что открываются сразу в ответ на действия пользователя.
У тебя же загрузка index.php занимает некоторое время, а потому создание нового окна блокируется как нежелательное. Сначала открывай окно, а уж потом шли запросы и пиши в него. |
Aetae,
Спасибо, сделал так, работает: function getPrintPlan(){ $.ajaxSetup({ async: false }); $.getJSON('index.php', function(data) { printPlan(data[1]); }); } |
Artur_Hopf, синхронный ajax - моветон. Но воля ваша.)
|
Часовой пояс GMT +3, время: 03:13. |