XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   Erzeugen und Download von JSON-file fehlerhaft (http://xhtmlforum.de/showthread.php?t=74091)

Iago2 21.05.2020 00:25

Zitat:

Zitat von protonenbeschleuniger (Beitrag 554260)
Ajax?
Bis jetzt ging es um Serverseigien Code. Die Frage bisher was, ob das im Browser ankommt das ist was du erwartest. Wenn es beim normalen Aufruf funktioniert, dann liegt es wohl am Ajax Code, den kennen wir aber nicht.

Im Browser kommt sogar mehr an als ich erwarte. So gibt mir console.log den ganzen Inhalt der Datei an.

AJAX request ist auskommentiert.

Code:

$("#JSON-export-full").on("click", function () {
  var url = window.location.href;
  window.location.href = url + "?action=download&variation=full";

  /*  $.ajax({
    type: "POST",
    url: "actions.php?action=createFullJson",
    data: "variation=full",
    success: function (result) {
      console.log(result);
    },
  }); */
});

actions.php (für AJAX request):
Code:

if($_GET['action'] == "createFullJson") {

        $file = createFile(createAJAX($connection,$_POST['variation']));
      // echo $file." is created";

        downloadFile($file);
    }


index.php (reload der Seite):
Code:

if($_GET['action'] == "download") {

  $file = createFile(createAJAX($connection,$_GET['variation']));
      //  echo $file." is created";

        downloadFile($file);
}

Ich hab das echo $file." is created"; in index.php und action.php auskommentiert. Seltsam, dass das bei index.php einfach mit in die Datei reingeschrieben wird.

protonenbeschleuniger 21.05.2020 11:11

Das ist ein ziemliches durcheinander. Die Frage ist aber nach wie vor, warum der download Dialog nicht angezeigt wird?

Da bis hierhin kein offenischtlicher Fehler zu sehen ist, solltest du ganz vorne anfangen und prüfen, was dein Browser macht wenn er diesen Header bekommt. Das geht einfach in dem du dir nur diesen ausgeben läßt.

So könnte eine test.php aussehen:
PHP-Code:

<?php
header
('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="test.php"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: 0');

Wird damit der Dialog angezeigt?

Iago2 21.05.2020 21:56

Zitat:

You can't "download a file using AJAX". AJAX is about downloading data from a server for JavaScript to process.

To let the user download the file either use a simple link to the file/servlet, or if you really, really need to use JavaScript, then assign the URL to document.location.href.
Quelle(1) stackoverflow

Zitat:

It's not about AJAX. You can download a file with AJAX, of course. However the file will be kept in memory, i.e. you cannot save file to disk. This is because JavaScript cannot interact with disk. That would be a serious security issue and it is blocked in all major browsers.

Quelle(2): stackoverflow

Schulmeisterlich geschrieben
Ich verweigere mich hier jedem Kommentar!

protonenbeschleuniger 21.05.2020 22:06

Ich bin verwirrt, AJAX ist genau deshalb erfunden worden damit du JS Code vom Server nachladen kannst. Irgendwie verstehe ich den Sinn von dem was du vor hast nicht. Der AJAX Code ist dafür da, dass du mit dem "runtergeladenen" JS Code weiterarbeiten kannst. Also das der Repsonse im JS ankommt. Wenn du einen Download anstossen willst musst du diesen mit einem normalen Request anstossen.

Daher war mir nicht klar was du hier genau erwartest, bzw. warum deine Erwartung nicht eingetreten ist. Von Ajax war auch wenig zu sehen, deine header Angaben sind nicht vom AJAX Request.

Es ist immer hilfreich wirklich alle Informationen zu teilen.

cloned 22.05.2020 12:22

Ich bin auch verwirrt, aber ich denke hier soll gar nicht eine Lösung gefunden werden? Der Threadstarter möchte lediglich denkanstöße oder Bestätigungen für seine Sachen haben?

Mit Ajax kann keine Datei heruntergeladen werden, das stimmt.
Das heißt aber nicht, dass die Datei dann nicht gespeichert werden kann wenn die Daten per Ajax vom Server an den Browser geschickt wird.


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:35 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2021, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2020