2014-05-05 69 views
1

我有「打印」按鈕,它調用ajax獲取並打開頁面在新窗口打印。Ajax無法成功返回成功或錯誤的第二個致電

<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獲取和控制去行動方法,並返回成功,然後它回來查看並進入成功功能,並打開新窗口,

但第二次點擊,它去控制器的行動方法,然後它返回成功,然後這一次它不會成功或失敗。

+0

你看在瀏覽器的控制檯中的請求/響應? –

+0

爲什麼你不通過AJAX將URL傳遞給'window.open'?你只需要去掉''? – Blazemonger

+0

嘗試更改'return;'爲'return false;' – Blazemonger

回答

0

你解決了嗎?我建議你將緩存設置爲false,當然要確保瀏覽器不阻止網站打開多個窗口。

function getPrint(e, Id) {   
    var url = '/PrintController/Print/' + "?Id=" + id; 

    $.ajax({ 
     cache: false, // Do not cache 
     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; 

}