Dojo Uploader HTML5插件vs iFrame插件

时间:2014-03-17 17:55:33

标签: javascript html5 dojo

我正在寻找在Dojo 1.7.5中使用dojox / form / Uploader。

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

情况似乎如此。但是,问题在于iFrame需要来自包含在textarea HTML标记中的服务器的JSON响应。这些标记导致HTML5插件在this.onComplete上的第168行失败(JSON.parse(xhr.responseText.replace(/ ^ {}&& /,''))); 因为responsetext是无效的JSON。

为什么会出现这种看似不相容的情况?有没有办法在不编写我自己的插件的情况下获得我想要的行为?

2 个答案:

答案 0 :(得分:0)

如果您仍然需要解决方案,我有一个解决方案。

你必须发送这样的信息:

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

答案 1 :(得分:0)

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

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

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