Если содержание только доступно на клиенте, вам необходимо отправить его на сервер. Попробуйте что-то вроде этого:
<a id="download_link">Download</a>
$('#download_link').on('click', function(e){
e.preventDefault();
window.location = 'my-handler.php?json=' + myJsonString;
});
// or without jQuery
document.getElementById('download_link').onclick = function(){
window.location = 'my-handler.php?json=' + myJsonString;
};
Затем заставить загрузку в my-handler.php
, используя данные, отправленные на сервер как содержимое файла:
// Use equivalent in your server side script if not using PHP
$filename = 'download-'.time().'.json';
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: Binary');
header('Content-disposition: attachment; filename="'.$filename.'"');
exit($_GET['json']);
Используя этот метод, текущее окно не должно быть заменено, но начало загрузки должно начаться, но вы можете открыть i n новое окно, если хотите.
Это быстрое и грязное решение. Обратите внимание, что это позволит человеку вводить что угодно и загружать файл. Возможно, было бы разумно хотя бы проверить содержание в первую очередь. Также могут быть проблемы с слишком большим содержанием.
Связанный: http://stackoverflow.com/questions/566922/how-do-i-download-javascript-string-as-a-file?rq=1 –
Является ли JASON доступным с сервера в виде отдельного файла ? Имеет ли он URL? – HBP
Вы действительно хотите скачать файл с помощью JavaScript или будете ли вы удовлетворены просто принуждением браузера выполнять загрузку ресурса, а не отображать его, когда браузер переходит к ресурсу? – apsillers