【发布时间】:2014-05-05 21:29:20
【问题描述】:
我有“打印”按钮,它调用 ajax get 并在新窗口中打开页面进行打印。
<button type="button" onclick="getPrint(event , 'Id')">Print</button>
function getPrint(e, Id) {
var url = '/PrintController/Print/' + "?Id=" + id;
$.ajax({
url: url,
async: false,
success: function (data) {
if (data.success == true) {
var mywindow = window.open('', 'Print', 'height=500,width=600,menubar=yes');
mywindow.document.write('<html><head><title></title>');
mywindow.document.write('</head><body >');
mywindow.document.write($('<div></div>').append(data.viewBody).clone().html());
mywindow.document.write('</body></html>');
mywindow.focus();
mywindow.print();
mywindow.close();
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
return;
}
控制器返回如下:-
return Json(new { success = true, viewBody = viewPrintSub }, JsonRequestBehavior.AllowGet);
我第一次单击“打印”按钮时,它工作正常。它执行 ajax 获取和控制转到 action 方法并返回成功,然后返回查看并进入成功函数并打开新窗口,
但是在第二次点击时,它会转到控制器操作方法,然后返回成功,然后这一次它根本不会成功或出错。
【问题讨论】:
-
您在浏览器控制台中查看请求/响应吗?
-
为什么不直接将 URL 传递给
window.open,而不使用 AJAX?你只需要去掉<head>吗? -
尝试将
return;更改为return false; -
我建议您在成功处理程序的开头添加
console.log(data.success)。在您的代码中,如果data.success不是true,则您的代码什么也不做。 -
它确实返回 {"success":true,"viewBody":"\r\n\u....在我检查浏览器控制台时响应。它第一次工作,但没有第二次点击打印按钮。第二次,尽管我在浏览器响应中看到了 true,但如果(data.success == true),控件永远不会进入内部。..
标签: javascript jquery ajax json printing