Скачать XML после сгенерированного в Ajax Call - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь создать функцию, которая экспортирует и XML при загрузке. Я использую функцию XMLWriter из PHP, которая прекрасно работает. Я на самом деле получаю желаемый результат, только он возвращается в моем ответе AJAX, а не в качестве загрузки, и я сказал сценарию сделать это.

Мой макет выглядит следующим образом:

JS + AJAX

// ///////////////////////////// //
// START EXPORT                  //
// ///////////////////////////// //

function exports(vars){

    $.ajax({

        url: domain + "/core/ajax/export.php",

        type: "post",

        dataType: "text",

        data: vars,

        success: function(data){

            if(vars.form == 'export-records'){



            }

        },

        error: function(jqXhr, textStatus, errorMessage){

            console.log("Error: ", errorMessage);

        }

    });

}

$('#export-propperties').bind('submit',function(){

    event.preventDefault();

    var content = $('#export-propperties').serializeArray().reduce(function (newData, item) {

        if (item.name.substring(item.name.length - 2) === '[]') {

            var key = item.name.substring(0, item.name.length);

            if(typeof(newData[key]) === 'undefined') {

                newData[key] = [];

            }

            newData[key].push(item.value);

        } else {

            newData[item.name] = item.value;

        }

        return newData;

    }, {});

    exports(content);

});

Итак, что здесь происходит, я отправляю свою форму в виде пары ключ-значение в мою функцию ajax. Работает отлично. Процесс php выглядит следующим образом.

        // START THE XML HERE
        // AFTER THE DATA IS FETCHED WE WILL PARSE IT NORMALLY. WE ARE GOING TO USE THE RESULT LATER, FIRST WE CREATE THE INSTANCE OF THE FILE
        // TO DEFINE FIRST THE XML

        $writer = new XMLWriter();  

        $writer->openURI('php://output');  

        $writer->startDocument('1.0','UTF-8');  

        $writer->setIndent(4);   


        // CREATE THE HEADING OF THE PRODUCTDATA

        $writer->startElement('ProductData');  

            $writer->writeAttribute('xmlns:xs', 'http://www.w3.org/2001/XMLSchema');  

            $writer->writeAttribute('xmlns', 'http://www.gs1.nl/productgegevens/insbou/004');  

            $writer->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');  

            $writer->writeAttribute('xsi:schemaLocation', 'http://www.gs1.nl/productgegevens/insbou/004 Productgegevens_insbou004.xsd');  

            // blablabla xml generation //

        $writer->endElement();  

        // END OF DOCUMENT

        $writer->endDocument();   

        $writer->flush();   

Проблема в том, что мой ответ кода XML, а не требуемая XML загрузка ($writer->openURI('php://output');). У меня такое ощущение, что я не могу выполнить окно загрузки в рамках вызова AJAX, или я здесь не прав? Как я могу решить это?

1 Ответ

1 голос
/ 01 апреля 2020

Возможно header('Content-Disposition: attachment; filename="filename.xml"'); в верхней части вашего PHP кода будет работать. Я не уверен, но попробуйте.
Другое решение - FileSaver. js.
Извините за мой Engli sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...