背景:我正在为音乐家制作管理页面。让我们说用户创建一个专辑,然后将一首歌上传到专辑中。我正在使用带有 jQuery表单插件的ajax帖子。
首先,我致力于将歌曲上传到现有专辑中(效果很好)。
然后,我致力于使用.append()和.attr(非常棒)创建新专辑并在没有刷新的情况下显示。
现在我正在努力将一首歌上传到专辑中,这要归功于append()。
问题:当准备好创建的专辑时,它很棒。所有值和功能与页面呈现时加载的相册完全相同。
当我尝试上传歌曲时,我收到服务器端错误。它使用与我用来将歌曲上传到ajaxed相册的完全相同的功能作为初始页面渲染专辑。
我刷新页面,我可以上传一首歌。
我正在使用jQuery.form插件,我认为这是因为该函数位于$(document).ready(function {...}
内上传脚本:
$('form#uploadSongToAlbum').submit(function() {
$(this).ajaxSubmit({
target: 'login/uploadSongToAlbum.php',
dataType: 'html',
beforeSubmit: function() {
alert(showRequest);
$.jGrowl("Uploading... hold on...<br />", { life:1000 });
},
success: function() {
selectUploadedID();
},
error: function() {
$.jGrowl(textStatus, { header:"<span style='color:red'>Error:</span>", sticky: true });
}
});
return false;
});
现在,进一步研究问题,我在Chrome中打开了控制台,进入网络并记录了ajaxed上传和页面加载上传的已发布请求,我发现了非常不同的值。 以下是ajaxed上传帖子的值(这个中断):
表单数据:
文件:silence2.mp3
专辑:80
以下是页面加载的帖子值(这个有效):
请求有效负载:
------ WebKitFormBoundaryZpJpGxBLJEBRYadH 内容处理:表格数据; NAME = “文件”;文件名= “silence2.mp3” 内容类型:audio / mp3
------ WebKitFormBoundaryZpJpGxBLJEBRYadH 内容处理:表格数据; NAME = “专辑” 80
------ WebKitFormBoundaryZpJpGxBLJEBRYadH -
先谢谢大家,大家。我一定做错了什么。如有必要,我可以提供更多代码。请记住:ajaxed相册和页面加载相册的html标记和值有效。它一定是jQuery,我做错了......
答案 0 :(得分:0)
尝试将enctype
属性添加到动态创建内容的表单标记中:
<form id="uploadSongToAlbum" action="login/uploadSongToAlbum.php" method="post" enctype="multipart/form-data">
<!-- snip... -->
</form>
此外,如果您的上传脚本是从$(document).ready
内调用的,则只会在页面加载时调用一次。如果要将其应用于动态创建的表单,请使用`live()'方法:
$('form#uploadSongToAlbum').live('submit', function() {
// ajaxSubmit code here....
});