Calling javascript from php file failed

Tags: , ,



I have three different files: index.html, app.js, app.php. On HTML element <a href="./files/sweetsencrypt.pdf" onclick="return decrypt(this.href);">Decrypt Sweets</a> I am calling javascript function in which I am giving ajax call to PHP:

function decrypt(filename){
            
           $.ajax({
               type: "POST",
               url: "app.php",
               data: { action:'decrypt', filename: filename }
           }).done(function( msg ) {
               alert( "Data returned: " + msg );
           });
           return false;
       } 

Till this everything is okay. When the PHP function is called, I need to call javascript functionality from app.js file in app.php file. But its getting failed. I am trying:

<?php
if($_POST['action'] == 'decrypt') {
    my_decrypt($_POST['filename']);
}

function my_decrypt($filename) {
    $filedata = file_get_contents($filename);
    // Remove the base64 encoding from our key
    $key = 'wejnjfff';
    $encryption_key = base64_decode($key);
    // To decrypt, split the encrypted data from our IV - our unique separator used was "::"
    list($encrypted_data, $iv) = explode('::', base64_decode($filedata), 2);
    $result = openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv);

    echo "<script type='text/javascript' src='./app.js'> 
            showPDF();
            alert('successful!') 
            </script>"; 
    return $result;
}

?>

Here, not the showPDF(); function is called nor the alert('successful!') popup is shown. I am new to PHP. Where am I getting wrong? How to call javascript from PHP?

Answer

  <?php

  if($_POST['action'] == 'decrypt') {
     $result = my_decrypt($_POST['filename']);
     echo json_encode(['result' => $result,'success' => 'successful']);
  }

  function my_decrypt($filename) {
      $filedata = file_get_contents($filename);
      // Remove the base64 encoding from our key
      $key = 'wejnjfff';
      $encryption_key = base64_decode($key);
      // To decrypt, split the encrypted data from our IV - our unique separator used was "::"
      list($encrypted_data, $iv) = explode('::', base64_decode($filedata), 2);
      $result = openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv);

      return $result;
  }

  ?>

and in your ajax script

   function decrypt(filename){
        
       $.ajax({
           type: "POST",
           url: "app.php",
           data: { action:'decrypt', filename: filename },
           dataType: 'json',
           success: function (response) {
                if(response.success === 'successful') {
                    alert( "Data returned: " + response.result);
                    showPDF();
                }
            }
       })
       
       return false;
   } 


Source: stackoverflow