Получение значений одновременно с загрузкой вложений файлов

У меня есть форма, которая запускает загрузку файла:

function downloadEnhancedSubtitle ($subtitle,$totalSequences,$filename) {
    // Build string
    $subtitleString = '';
    foreach ($subtitle as $thisSegmentKey => $segment) {
        $sequenceString = $segment->sequence."rn";
        $sequenceString .= formatMilliseconds($segment->startTimeInMilliseconds).' --> '.formatMilliseconds($segment->endTimeInMilliseconds)."rn";
        if(isset($segment->textLine1)) $sequenceString .= utf8_decode($segment->textLine1)."rn";
        if(isset($segment->textLine2)) $sequenceString .= utf8_decode($segment->textLine2)."rn";
        if(isset($segment->textLine3)) $sequenceString .= utf8_decode($segment->textLine3)."rn";
        $sequenceString .= "rn";
        $subtitleString .= $sequenceString;
    }
    $subtitleString .= ($totalSequences+1)."rn99:99:90,000 --> 99:99:99,999rnEnhancedrn";

    // Download string
    header("Content-Type: text/plain;charset=windows-1252");
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header("Content-Length: " . strlen($subtitleString));
    echo $subtitleString;
}

Пользователь отправляет файл субтитров, который «оптимизируется» на сервере и отправляется обратно пользователю в виде загрузки вложения. Но я хотел бы в то же время (тот же вид формы, где загружается файл), чтобы вызвать модальный с некоторыми данными процесса, например, сколько строк, где оптимизирован.

Поскольку «Content-Disposition: attachment» автоматически загружает все напечатанное на экране, есть ли какой-либо способ получить значение переменной с помощью этого ответа? Может быть, изменить все, чтобы быть запросом ajax?
(использование PHP на серверной части)

1 ответ

  1. Во — первых, вам нужно сохранить файл на сервере, то вы можете получить ответ со всеми переменными, но это одна проблема-вам нужно удалить все сгенерированные файлы для безопасности.

    function downloadEnhancedSubtitle ($subtitle,$totalSequences,$filename) 
    {
        [...]
        // Response for ajax
        echo json_encode(
            [
                'filename' => $filename,
                'link' => 'http://localhost/uploads/' . $filename,
                'subtitle' => $subtitleString
            ]
        );
    }
    

    Javascript (jQuery)

    Вы получаете все ваши переменные от сервера.

    $.ajax({
        [...],
        success: function(response) {
            // if response is not object
            var obj = JSON.parse(response),
                filename = obj.filename,
                link = obj.link,
                subtitle = obj.subtitle;
    
            // if response is object
            var filename = response.filename,
                link = response.link,
                subtitle = response.subtitle;
    
        }
    });