2015-09-23 4 views
0

Мне нужно сделать ajax-вызовы для цикла. ajax дает мне ответ text/html. Теперь я должен распечатать каждый ответ. Я делаю код ниже:Как напечатать ответ ajax с помощью jquery

function printBill(printBills, lastBillNo, type,taxType,outletId,date){ 

var printableObjects=[]; 
printBills.forEach(function(data){ 
    lastBillNo++; 
    console.log(JSON.stringify(data)); 
    $.ajax({ 
     url: contextPath+"/print/"+lastBillNo+"/"+type+"/"+taxType+"/"+outletId+"/"+date, 
     type: "POST", 
     data: JSON.stringify(data), 
     contentType: 'application/json', 
     async:false, 
     success:function(response){ 

      printableObjects.push(response); // pushing response to array. 

     } 
    }); 
}); 
return printableObjects; 
} 

Эта функция дает мне printableObjects как массив .. теперь я хочу, чтобы напечатать все объекты внутри этого объекта массива. Чтобы напечатать этот объект я использую следующий код:

function printIt(printableObj){ 
var counter = 0; 
var timer = setInterval(function(){ 
    printContent(printableObj[counter]); 
    counter++; 
    if (counter === printableObj.length) { 
     console.log("clearing timer :"+counter+" length of the obj   :"+printableObj.length); 
      clearInterval(timer); 
     alert("Printing done .."); 
      window.location.href="takeAway"; 

    } 
},500); 
console.log("============"); 
return true; 
} 

function printContent(printDoc){ 
//console.log("Printing object is :"+el); 
    var restorepage = document.body.innerHTML; 
    var printcontent = printDoc; 
    document.body.innerHTML = printcontent; 
    window.print(); 
    document.body.innerHTML = restorepage; 
} 

Я посылаю это принт на sendToOne ноту. Всякий раз, когда печать происходит в тот момент, когда мой браузер попал. Пожалуйста, дайте мне знать любое решение. Мне не повезло.

+0

Что это не работает? 'printContent' ничего не печатает? Вы ждали завершения ajax _before_, пытаясь распечатать? – tfrascaroli

+0

Переместите цикл ForEach на printableObjects внутри успеха. И нет необходимости возвращать printableObjects из функции printBill. –

+0

проблема браузер не отвечает после окончания печати ... –

ответ

0

Попробуйте переместить цикл foreach после вызова.

function printBill(printBills, lastBillNo, type,taxType,outletId,date){ 

var printableObjects=[]; 
printBills.forEach(function(data){ 
    lastBillNo++; 
console.log(JSON.stringify(data)); 
$.ajax({ 
    url: contextPath+"/print/"+lastBillNo+"/"+type+"/"+taxType+"/"+outletId+"/"+date, 
    type: "POST", 
    data: JSON.stringify(data), 
    contentType: 'application/json', 
    async:false, 
    success:function(response){ 

     printableObjects.push(response); // pushing response to array. 
     printableObj.forEach(function(d){ 
     // setTimeout(printContent(d),1000); 
     printContent(d); 
}); 


    } 
}); 
}); 
    return printableObjects; 
} 

function printContent(printDoc){ 
//console.log("Printing object is :"+el); 
var restorepage = document.body.innerHTML; 
var printcontent = printDoc; 
document.body.innerHTML = printcontent; 
window.print(); 
document.body.innerHTML = restorepage; 
} 
+0

Я получаю Ошибка принтера в браузере Firefox –

0

Если это весь ваш код, вы явно не ждет всех деклараций Аякса.

Попробуйте этот пример (не могу проверить прямо сейчас, извините)

function printBill(printBills, lastBillNo, type, taxType, outletId, date, callback){ 
    //We create a new array, which essentially stores all the calls to ajax 
    //so we can listen to all their completions. 
    var requests=[], 
     printableObjects = []; 
    printBills.forEach(function(data){ 
     lastBillNo++; 
     console.log(JSON.stringify(data)); 
     requests.push($.ajax({ 
      url: contextPath+"/print/"+lastBillNo+"/"+type+"/"+taxType+"/"+outletId+"/"+date, 
      type: "POST", 
      data: JSON.stringify(data), 
      contentType: 'application/json', 
      async:false, 
      success:function(response){ 

       printableObjects.push(response); // pushing response to array. 
      } 
     })); 
     //We use $.when() to check for all the ajax call's completions and 
     //execute a function when they're all done. the fn.apply() is being 
     //used to pass each item as an individual parameter. 
     $.when.apply($, requests).then(
      callback(printableObjects); 
     ); 
    }); 
    return printableObjects; 
} 

И вы используете его так:

printBill(printBills, lastBillNo, type, taxType, outletId, date, function (printableObjects) { 
    //Do something with that array - printableObjects 
} 

Более подробную информацию о $.when() Более подробную информацию о apply()

Смежные вопросы