मेरे पास एक PHP स्क्रिप्ट है जो लूप के माध्यम से दूसरी स्क्रिप्ट को कॉल करती है। स्क्रिप्ट जिसे तब कहा जाता है, एक टहनी टेम्पलेट को प्रतिध्वनित करता है जिसमें एक जावास्क्रिप्ट संलग्न होता है जो एक पीडीएफ निर्यात करता है। मुद्दा यह है कि जावास्क्रिप्ट केवल एक बार निष्पादित होता है। यहाँ प्रवाह है:

Generate-invoice.php -> इनवॉइस.php -> टहनी टेम्प्लेट जिसमें एक स्क्रिप्ट टैग है -> उस जावास्क्रिप्ट का कोड है:

window.onload = function() {
  kendo.pdf.defineFont({
      "Comfortaa": "/doc/fonts/Comfortaa-Regular.ttf",
      "Comfortaa|Bold": "/doc/fonts/Comfortaa-Bold.ttf",
  });

  var inv_num = document.querySelector('#inv_num').dataset.id;
  var company = document.querySelector('#company').dataset.id;

  function ExportPdf(){ 
      kendo.drawing
      .drawDOM("#myCanvas", 
      {
      paperSize: "A4",
      margin: { top: "0.5cm", bottom: "0.5cm", left: "0.5cm", right: "0.5cm" 
},
      scale: 0.8,
      height: 500
      })
      .then(function(group){
      kendo.drawing.pdf.saveAs(group,company + " | Invoice #" + inv_num + 
".pdf")
      });
  }

  ExportPdf();
  console.log('It ran');
}

और जब मैं कंसोल में देखता हूं, 'यह भाग गया' केवल एक बार पोस्ट किया जाता है, जहां इसे दो बार पोस्ट किया जाना चाहिए क्योंकि टहनी टेम्पलेट को 2 बार बुलाया गया था।

संपादित करें: बस आपको यह बताना चाहता हूं कि मैं इनवॉइस.php स्क्रिप्ट को include लूप में डालकर कॉल कर रहा हूं।

0
dydx 12 जून 2019, 23:01

1 उत्तर

सबसे बढ़िया उत्तर

अपनी स्ट्रिंग को दो बार या जितनी बार स्क्रिप्ट को कॉल किया गया था, उतनी बार लॉग इन करने के लिए, स्टेटमेंट को ExportPdf() function में ले जाएँ

इसे window.inload से कॉल करना केवल एक बार चलेगा, और यह पहली बार विंडो लोड किया गया था।

window.onload = function() {
  kendo.pdf.defineFont({
      "Comfortaa": "/doc/fonts/Comfortaa-Regular.ttf",
      "Comfortaa|Bold": "/doc/fonts/Comfortaa-Bold.ttf",
  });

  var inv_num = document.querySelector('#inv_num').dataset.id;
  var company = document.querySelector('#company').dataset.id;

  function ExportPdf(){ 
      kendo.drawing
      .drawDOM("#myCanvas", 
      {
      paperSize: "A4",
      margin: { top: "0.5cm", bottom: "0.5cm", left: "0.5cm", right: "0.5cm" 
      },
      scale: 0.8,
      height: 500
      })
      .then(function(group){
      kendo.drawing.pdf.saveAs(group,company + " | Invoice #" + inv_num + ".pdf")
      });
      //Moved here
      console.log('It ran');
  }

  ExportPdf();
}

संपादित: window.onload केवल एक बार फायर करेगा और ब्राउज़र रीफ्रेश होने के अलावा कभी नहीं। वांछित परिणाम प्राप्त करें, मेरा सुझाव है कि आप फ़ंक्शन को window.onload के बाहर रखें। उस स्थिति में, आपके HTML/JavaScript कोड में, आपको अपने .onload में टेम्प्लेट को कॉल करने वाले मुख्य फ़ंक्शन को लपेटना होगा।

1
maswerdna 12 जून 2019, 20:25