我正在考虑在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需要来自服务器的封装在文本区域HTML标记中的JSON响应。这些标记导致HTML5插件在this.onComplete(JSON.parse(xhr.responseText.replace(/^{}&&/,‘’)上的第168行失败;因为响应文本不是有效的JSON。
为什么会出现这种看似不兼容的情况?有没有办法在不写自己的插件的情况下获得我想要的行为?
发布于 2014-10-07 15:42:31
如果你还需要一个解决方案,我有一个。
你必须像这样发送消息:
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);
}在函数“handleResponse”中:
// 'json' and 'javascript' and 'text'
response.text = doc.getElementsByTagName('textarea')[0].value; // text
response.text = eval(replaceAll(response.text, "\\", ""));这不是一个好的解决方案,但我找不到另一个解决方案,因此我也写了一篇文章:ASP.NET webAPI <--> Dojo uploader response format is wrong
发布于 2014-10-07 17:29:46
我自己解决了这个问题,这是服务器端的解决方案:
json = System.Web.HttpUtility.HtmlEncode(json)
Dim msg = "<textarea>" + json + "</textarea>"dojo文件上传器现在可以正确地解析响应。
https://stackoverflow.com/questions/22461761
复制相似问题