1

背景:私はミュージシャンの管理ページに取り組んでいます。ユーザーがアルバムを作成してから、アルバムに曲をアップロードするとします。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アップロードとページ読み込みアップロードの両方の投稿されたリクエストを記録しました。非常に異なる値を発見しました。アップロードされた投稿の値は次のとおりです(これは壊れています)。

フォームデータ

file:silence2.mp3

アルバム:80

ページに読み込まれた投稿の値は次のとおりです(これは機能します)。

ペイロードのリクエスト

------ WebKitFormBoundaryZpJpGxBLJEBRYadH Content-Disposition:form-data; name="ファイル"; filename = "silence2.mp3"コンテンツタイプ:audio / mp3

------ WebKitFormBoundaryZpJpGxBLJEBRYadH Content-Disposition:form-data; name = "album" 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呼び出された場合、ページが読み込まれたときに1回だけ呼び出されます。動的に作成されたフォームに適用する場合は、 `live()'メソッドを使用します。

$('form#uploadSongToAlbum').live('submit', function() { 
    // ajaxSubmit code here....
});
于 2011-08-16T05:18:27.903 に答える