1

背景:我正在为音乐家制作管理页面。假设用户创建专辑,然后将歌曲上传到专辑中。我正在使用带有jQ​​uery 表单插件的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 上传后的值(这个中断):

表格数据

文件:沉默2.mp3

专辑:80

这是页面加载的帖子值(这个有效):

请求有效载荷

------WebKitFormBoundaryZpJpGxBLJEBRYadH Content-Disposition: form-data; 名称=“文件”;文件名="silence2.mp3" 内容类型:音频/mp3

------WebKitFormBoundaryZpJpGxBLJEBRYadH Content-Disposition: form-data; 名称="专辑" 80

------WebKitFormBoundaryZpJpGxBLJEBRYadH--

提前非常感谢大家。我一定做错了什么。如有必要,我可以提供更多代码。请记住:ajaxed 相册和页面加载相册的 html 标记和值都是有效的。我做错了一定是jQuery...

4

1 回答 1

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....
});
于 2011-08-16T05:18:27.903 回答