小编RPW*_*RPW的帖子

如何让浏览器提示用户保存服务器动态生成的文件?

客户端使用jquery ajax提交post请求,如下所示:

$.ajax({
    url: "/xxx?request1", 
    data: theParams,
    type: 'post',
    error: function(XMLHttpRequest, textStatus, errorThrown){
        // error handling
    },
    success: function(data){
    var theResult = JSON.parse(data);
        // success handling
    }
});
Run Code Online (Sandbox Code Playgroud)

Apache配置为将请求传递/xxx?给自定义应用程序.应用程序处理请求并返回信息.通常,此信息以JSoN形式返回,并使用jquery/javascript显示在"成功处理"部分中.在编写JSON之前,应用程序会编写以下标头(然后通过apache返回):

HTTP/1.0 200 OK
Connection: close
Server: MyServer v. 0.826
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)

我也有饼干工作,在200 OK线之后放置以下内容:

Set-Cookie: cookie_name=value; Domain=example.com; Path=/; Expires=Fri, 21-Mar-2014 01:40:22 GMT; HttpOnly
Run Code Online (Sandbox Code Playgroud)

在一种情况下,我希望用户能够保存返回的数据(作为纯文本文件).但这是我遇到问题的地方.

如果我使用JavaScript打开一个窗口并将数据写入新窗口,我发现Safari和Chrome都禁用了"另存为..."菜单选项(在Mac上).

(我有一个使用base64 URI工作的版本,但相对于网站的其他部分,它看起来没有抛光.)

然后我开始尝试包含Content-Disposition: attachment; filename=file.txt 标题,但我永远不会让浏览器产生提示.我尝试将此标题放在200 OK行之后,以及之后:

Content-Type: text/plain
Content-Disposition: attachment; filename=file.txt
Run Code Online (Sandbox Code Playgroud)

除了不确定Content-Disposition标题的确切格式之外,我还不确定我是否有Content-Type正确的或者ajax处理程序代码中有什么东西阻止了保存.

我试图找到将所有东西放在一起的例子,但是只能找到零件而且我无法正确地将它放在一起.有什么建议?

我的目标只是现代浏览器,三个主要平台(Mac/Windows/Linux),客户端只有HTML5/JavaScript.

javascript browser ajax file save

5
推荐指数
1
解决办法
1万
查看次数

为什么 JSON 中的汉字会导致 JSON.parse 出现“bad control character”错误?

我有一个标准的 HTML5 类型的客户端/服务器设置。服务器端全是Java,客户端是JavaScript。使用 ajax 我发送查询并接收回复。到目前为止,我没有遇到任何问题JSON.parse(data)。但是,我有一个新用户使用汉字输入了她的姓氏。这会导致客户端出现“JSON.parse: bad control character in string literal”错误。

服务器按如下方式构建回复(省略异常处理):

JSONObject jsono = new JSONObject();
jsono.put("last_name", last_name);
jsono.put("first-name", first_name);
String response = jsono.toString();
Run Code Online (Sandbox Code Playgroud)

客户端收到类似的东西:

{"last_name":"Smith","first_name":"Bob"}
Run Code Online (Sandbox Code Playgroud)

回复显示在设置为的网页上 <meta charset="utf-8">

var theResult = JSON.parse(data);
$('#first_name').html(theResult.first_name);
Run Code Online (Sandbox Code Playgroud)

这工作得很好。但是,对于中国用户,客户端收到

{"last_name":"?","first_name":"Bob"}
Run Code Online (Sandbox Code Playgroud)

这会导致 json.parse 错误。

我现在开始研究其他角色。比如Andrés不会引起错误,也不会正常显示。看起来像Andr?s

所以,我显然错过了一些东西。有人能告诉我问题出在哪里(例如,它是服务器端?客户端?JavaScript?jquery?html?)以及如何解决它?

javascript java jquery json utf-8

5
推荐指数
1
解决办法
6877
查看次数

Java:在File.isFile()上下文中什么构成“普通”文件?

我遇到了file.isFile()返回false(表示文件不是“正常”)的情况。但是,我找不到“正常”的定义。该文档链接到Oracle状态:

如果文件不是目录,并且满足其他与系统有关的条件,则该文件是正常的。

该文件归所有者所有_www:staff并具有许可权-rw-r--r--。该目录也归所有者拥有_www:staff并具有权限drwxrw-r--。正在访问文件的进程由拥有bob:staff。系统是MacOS 10.9。该过程可以读取,加载和显示文件。唯一的问题是对isFile()的调用返回false,这意味着Java认为它不是普通文件。

因此,回到更大的问题,即使文件确实存在,路径正确并且可以访问文件,在什么情况下此调用将返回false?

java macos file osx-mavericks

5
推荐指数
1
解决办法
908
查看次数

Safari 是否支持 Web Audio API source.start(0)(在 Chrome 上工作得很好)?

我正在尝试实现网络音频 API。该代码适用于 Chrome 29.0.1547.76,但不适用于 Safari 6.0.5 (8536.30.1)。关键是我使用 noteOn(0) 还是 start(0)。

我想使用 start() 以便我可以播放声音的一部分:

asource.start(0, 2, 1);
Run Code Online (Sandbox Code Playgroud)

在 Chrome 中工作正常(立即播放,从 2 秒标记开始,播放 1 秒),但结果是

TypeError: 'undefined' is not a function (evaluating 'asource.start(0, 2, 1)')
Run Code Online (Sandbox Code Playgroud)

在 Safari 上。将这一行替换为

asource.noteOn(0);
Run Code Online (Sandbox Code Playgroud)

作品。[好吧,我需要调用 noteOff(0) 而不是 stop(0)。] 我在 start(0) 中遇到了同样的错误。那么,我假设 Safari 没有实现 start(0) ?但如果是这样,为什么HTML5 Rocks中使用 start(0) 的一些示例可以工作?

作为参考,这里是完整的网页。我尝试过许多不同的声音/格式;都会导致相同的错误。

<!DOCTYPE html>
<html lang=en>
<head>
<meta charset="utf-8">
<title>Web Audio API Issue</title>
</head>
<body>
<p>Example working on Chrome but not Safari when using start()</p>

<button id="Load" onclick="init()" …
Run Code Online (Sandbox Code Playgroud)

html javascript safari google-chrome web-audio-api

4
推荐指数
1
解决办法
3686
查看次数