此代码适用于FF和chrome。在IE 8或9中,我得到500错误,表示not null属性为null。
这是html
<div id="upload_button_div_general" class="fileupload-buttonbar" data-url="/Upload/SomeMethod">
<label class="fileinput-button ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-primary" role="button">
<span class="ui-button-text">
<span>Add Documents...</span>
</span>
<input id="upload_button" type="file" name="postedFiles" multiple="" />
</label>
</div>
<div id="UploadMessage" data-bind="visible: showMessage">
<span>Documents</span>
<ul data-bind="foreach: upload()">
<li>
<a href="#" data-bind="click: $parent.openFile">
<span data-bind="text: $data.fileName"> </span>
</a>
</li>
</ul>
</div>
这是javascript
function Upload(div, additionalParams, successFunc, failureFunc) {
$('#' + div).fileupload({
dataType: 'json',
url: rootPath + 'Upload/SomeMethod',
formData: additionalParams,
start: function (e, data) {
showLoading();
},
stop: function (e, data) {
hideLoading();
},
add: function (e, data) {
data.submit();
},
always: function (e, data) {
var result = data.result;
if (result.HasError) {
failureFunc(result.Error);
} else {
successFunc(result);
}
}
});
};
控制器方法是
public virtual JsonResult SomeMethod(IEnumerable<HttpPostedFileBase> postedFiles, int id)
答案 0 :(得分:6)
我能够通过包含jquery.iframe-transport.js让它工作,然后我不得不从div中删除我的“with”数据绑定以使其在IE8中工作,因为它在IE9中工作。 (我在发布的代码之上有一个绑定)感谢所有的建议。
答案 1 :(得分:1)
由于此函数在FF中工作正常,因此只有一种可能性,即您在此处传递的变量未定义仅适用于IE。
检查IE控制台中的每个变量值。
提示:IE对类型和所有内容都很严格。
例如:
parseInt(Number);
FF和Chrome将其视为十进制值,而IE则将其视为八进制数。
因此,建议给予parseInt(Number,10)
。
即使是日期,如果你提供
var currentDate = new Date("March 18, 2013 11:13:00")
适用于Chrome和FF,但在IE中显示undefined
或invalid Date
。
您可以找到有关日期here
的推荐表示法的更多信息因此,在上面的示例中,我只是想告诉您,您可能忘记声明类型或正确表示法。
尽管如此,这不是您所寻求的答案,但我希望这些信息能为您提供帮助。
更新:由于错误为500 error
,因此问题更可能出现在rootPath
变量的值中。
答案 2 :(得分:0)
只需将content-type设置为text / html并将其作为JSON发送。
这适用于所有浏览器。
答案 3 :(得分:0)
$("#txt1").fileupload({
replaceFileInput: false,
dataType: "json",
datatype:"json",
url: "<%=Page.ResolveUrl("~/WebService/AddAttachment.ashx")%>",
done: function (e, data) {
$.each(data.result, function (index, value) {
//You get the response data in here from your web service
})
$("#txt1").val("");
}`enter code here`
});
这在IE8和IE9 +上面都经过测试并正常工作。 请确保使用正确的dataType:“json”(或数据类型:“json”),并确保您的Web服务方法的响应正确。 感谢
答案 4 :(得分:0)
在IE上如果你在上传文件时返回像json这样的数据,你可以得到这样的数据(json):
done: function (e, datos)
{
try
{
//This in FF, Chrome, Safari
data=eval(JSON.parse(datos.result));
}catch (er)
{
//This in IE
data=eval(JSON.parse(datos.result[0].documentElement.innerText));
}
答案 5 :(得分:-2)
如果通过jQuery fileupload你的意思是使用http://blueimp.github.com/jQuery-File-Upload/,那么它在浏览器支持部分明确指出IE 10+是他们实现的每个功能所必需的。
https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support
如果您的意思是另一个插件,请忽略我的评论。