奇怪的问题或错误。我使用的是jQuery Form Plugin,它在任何地方都可以正常工作,我可以在窗体上单击文件上传enctype:multipart/form-data
。在这种形式下,我面临着两件奇怪的事情......jQuery表单插件:enctype:multipart/form-data和file-upload - 没有JSON返回?
- 从服务器返回的JSON对象为空!
- 在Opera中,提交按钮甚至会触发文件下载!
但是,只有当我在表格中保留enctype:multipart/form-data
和input type="file"
时才会发生这种情况。没有它,一切正常,并且JSON对象被正确地返回 - 并且在Opera中没有下载。
HTML:
<form accept-charset="UTF-8" action="/ajax/profiledetails" id="profileAboutMeForm" method="post" novalidate="novalidate" encoding="multipart/form-data" enctype="multipart/form-data">
...
<p class="rel avatarUpload">
<label class="label" for="profileAvatar">Choose Avatar</label>
<img class="profileAvatar avatar30" src="" alt="user">
<input class="fileUpload br3" id="profileAvatar" name="profile[avatar]" type="file">
</p>
...
</form>
的jQuery:
$(formId).ajaxSubmit({
type: "POST",
cache: false,
resetForm: reset,
dataType: "text json",
success: function(jsonObject, status) {
console.log("status + ", jsonObject.status: "+ jsonObject.status + ", jsonObject.data: " + jsonObject.data);
任何想法可能是什么造成的?我如何解决这个问题?
提前致谢。
编辑:
我从来没有尝试过,虽然是只要登录对象本身,在这里事实证明,在这种情况下(只有当文件的输入和加密类型设置)的JSONObject的是一个字符串而不是一个对象。
if (typeof jsonObject == 'string')
console.log('yes, it's a string'); //yes, it's a string
jsonObject = JSON.parse(jsonObject);
console.log(jsonObject);
因此,这意味着我在JavaScript的再有一个JSObject,这解决我的第一个问题,但是歌剧错误仍然存在!有任何想法吗?
嗯,首先,感谢您为你的答案,我读了我的歌呃你发布上面的小片段的文档的js文件。经过一段时间玩这个东西,甚至实现了两个辅助函数objToString和elementToString,我发现实际上没有这些函数被触发,因为jsonObject不是一个对象而是一个STRING。我更新了我的问题,以便您明白我的意思。我现在所做的是将其转换回JSObject,以便我的问题1得到解决。但是,歌剧的下载仍然存在!有任何想法吗? – matt 2012-02-21 10:40:28
好的,这可能是一个错误!解决方案是服务器必须使用内容类型的HTML而不是JSON进行响应!随着HTML一切工作得很好! – matt 2012-02-21 13:20:55