2014-08-27 60 views
0

在我的代码,我成功地使用这种结构:写作JSON对象JSON文件

$.getJSON('Json_users_templates/SO_example.json', function(data) { 
}); 

获得从本地上传.json文件JSON数据对象。

现在我需要一些代码来改变的对象写入到另一个地方以.json文件..

我试图用这样的代码:

$.ajax 
    ({ 
     type: "GET", 
     dataType : 'json', 
     async: false, 
     url: 'http://your.host/save_json.php', 
     data: { data: JSON.stringify(eventsholded) }, 
     success: function() {alert("Thanks!"); }, 
     failure: function() {alert("Error!");} 
    }); 

和.PHP-reciever

<?php 
$myFile = "general.json"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = $_GET["data"]; 
fwrite($fh, $stringData); 
fclose($fh) 
?> 

但它不工作,Firefox显示.php文件中的错误。

我只需要写json对象如

var jsondata = { 
    name : "bobby", 
    age: "77" 
}; 

to .json file ..我可以做到这一点,而无需使用PHP?我应该添加任何东西output.json,使其接受新的数据?

+0

你不能在所有的浏览器到磁盘的客户机上随便写。 – 2014-08-27 16:40:13

+0

对于本地读/写,您可能需要查看HTML5 Filereader和Filewriter API – 2014-08-27 16:44:32

+0

PHP文件中的错误是什么? Javascript看起来很好,问题在于PHP。 – Barmar 2014-08-27 16:44:46

回答

0

浏览器JavaScript无法将文件写入服务器。

这意味着你将不得不使用AJAX和一些服务器端语言(PHP,ASP.net等),如果你想写信给你自己的服务器。

浏览器在网页上对Javascript进行沙箱处理,以便它们也不能将文件写入用户计算机。你可以做的是发送浏览器运行时生成的文件,就好像用户点击了一个链接,然后用户可以手动保存文件。新的HTML5 Filewrite API 可能工作,但它是非常新的,大多数浏览器还不支持它。

0

创建一个数据:URI,这基本上是我如何做到这一点:

1)让所有的内容转换成字符串,就可以使用

content = JSON.stringify(YOUR_JSON) 

2)构建数据URI:

uriContent = "data:application/json," + encodeURIComponent(content) 

会有取决于Base64的浏览器类型等编码(atob/btoa),而不是使用encodeURIComponent方法可能会使事情更effici长度限制ENT。

3)打开一个新窗口和“重定向”它这个URI提示下载位置:

newWindow = window.open(uriContent, 'JSON'); 

就是这样。

0

而正确的方法是使用 HTML5 FileWriter API本地写入文件, 我有一个方便的一段代码,这是使用同样的方式console.log使用, 虽然它保存上传.json文件,但它问你在哪里保存它。 试一试。

// for JSON debugging (saving to files) 
(function(console) { 
    console.save = function(data, filename) { 
     if (!data) { 
     console.error('Console.save: No data'); 
     return; 
     } 
     if (!filename) { 
     filename = "console.json"; 
     } 
     if (typeof data === "object") { 
     data = JSON.stringify(data, undefined, 4); 
     } 
     var blob = new Blob([data], {type:"text/json"}); 
     var e = document.createEvent("MouseEvents"); 
     var a = document.createElement("a"); 

     a.download = filename; 
     a.href = window.URL.createObjectURL(blob); 
     a.dataset.downloadurl = ["text/json", a.download, a.href].join(":"); 
     e.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 
     a.dispatchEvent(e); 
    } 
})(console); 

然后调用它像:

var some_json = {foo:2}; 
console.save(some_json,"newfile.json"); 

UPDATE

显然,HTML5文件系统API是认为

2014年4月,它在public-webapps上宣布文件系统API规范应该被认为是死的。

Link

+0

它工作正常,将尝试编辑它重新写入已有的文件 – 2014-08-28 07:15:30