Dojo Uploader HTML5插件vs iFrame插件



我正在考虑在Dojo 1.7.5中使用dojox/form/Uploader。

我想有多个文件上传不使用Flash在现代浏览器,如果IE不支持它,它可以只有一个上传。从文档(http://dojotoolkit.org/reference-guide/1.7/dojox/form/Uploader.html)来看,如果你需要iFrame插件,它将使用IE的iFrame和其他浏览器的HTML5插件。

似乎是这样。但是,问题是iFrame需要来自服务器的JSON响应,这些响应封装在textarea HTML标记中。这些标签导致HTML5插件在this.onComplete(JSON.parse(xhr.responseText.replace(/^{}&&/, "))第168行失败;因为响应文本是无效的JSON。

为什么看起来不兼容?有没有办法得到我想要的行为不写我自己的插件?

如果你还需要一个解决方案,我有一个。

你必须这样发送消息:

Dim msg = "<textarea>'{" + Chr(34) + "name" + Chr(34) + ":" + Chr(34) + fileName + Chr(34) + "," + Chr(34) + "file" + Chr(34) + ":" + Chr(34) + returnData.Item1 + Chr(34) + "," + Chr(34) + "type" + Chr(34) + ":" + Chr(34) +   returnData.Item3 + Chr(34) + "}'</textarea>"
Dim response = Request.CreateResponse(Of String)(HttpStatusCode.Created, msg)
response.Content.Headers.ContentType = New MediaTypeHeaderValue("text/html")
Return response

在客户端,你必须修改iframe.js来处理这个响应。

function escapeRegExp(string) {
return string.replace(/([.*+?^=!:${}()|[]/\])/g, "\$1");
}
function replaceAll(string, find, replace) {
return string.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}

和函数" handlerresponse ":

// 'json' and 'javascript' and 'text'
response.text = doc.getElementsByTagName('textarea')[0].value; // text
response.text = eval(replaceAll(response.text, "\", ""));

这不是一个很好的解决方案,但我找不到另一个,我也做了一个帖子,因为:ASP。——>Dojo上传器响应格式错误

我自己解决了这个问题,下面是服务器端的解决方案:

json = System.Web.HttpUtility.HtmlEncode(json)
Dim msg = "<textarea>" + json + "</textarea>"

dojo文件上传器现在可以正确解析响应

最新更新