2011-12-22 1 views
0

ファイルをアップロードするために提供されている場合、私はサービスをbitsontherunするために、フォームのアクションURLを変更しようとしています:なぜフォームがまだ私はfalseを返すてるにもかかわらず、提出された(私は変更フォームのアクションのattr)

オリジナルをHTML:

<form accept-charset="UTF-8" action="/clients/belsobeer/videos" class="new_video" id="new_video" method="post"> 

    <label>Select video</label> 
    <input id="uploadFile" type="file" name="file"> 
    <small id="uploadText">Videos can be... Up to 1 GB in size, Up to 5 minutes in length, A wide variety of formats (WMV, AVI, MP4, MOV, FLV, ...)</small> 


    <div class="actions"> 
    <input id="video_submit" name="commit" type="submit" value="Create Video"> 
    </div> 
</form> 

JS(実行時にビットへのフォームアクションを変更):

$("#new_video").submit(function(){ 


    if ($("#uploadFile").val() != '') { 
    alert('before change'); 
    $("#new_video").attr("action") = 'http://upload.bitsontherun.com/v1/videos/upload?api_format=json&amp;key=Azfd6JNl&amp;token=919fddfe5c7e083893735e1043ca9d3f659f11467a69412'; 
    alert('after change'); 
    return false; 
    } 
}); 

私は「変更前」のアラートボックスが表示されますが、その後、フォームは、元のアクションに提出されますと私は決してない2番目の警告を「変更後」にします。何故ですか?

.preventDefaultを使用することはできますが、フォームアクションを変更してからmultipartを追加して他の入力の名前を変更しても、実際には新しい値でフォームを送信する必要があります。

+0

これを上の扱い方が良いでしょうバックエンド。通常どおりフォームを送信し、ファイルアップロードが含まれている場合は、POSTを送信します(またはAPIを提供する場合はAPIを使用することをお勧めします)。こうすることで、ユーザーはフォームを送信した後、サードパーティのサイトに送信されるのではなく、サイトに残り、プロセスが流動的になります。 –

+0

@ChrisPratt、フォームがいつものように提出されると、私のサーバーへのファイルのアップロードは自動的に開始されませんか?これらはアップロードされている大きな動画ですが、私のサーバーからbotrサーバーへの別のhttp投稿を再作成するのではなく、動画のアップロードを直接ユーザーのブラウザとBitontherunの間に行うことになります。ただし、ファイルをクライアントのブラウザからbotrにアップロードするサーバーサイドの投稿を再作成する方法はありません(最初にファイルを自分のサーバーにアップロードする必要はありません)。 – Homan

答えて

2

これは、構文エラーが発生します。

$("#new_video").attr("action") = 'http://upload.bitsontherun.com/v1/videos/upload?api_format=json&amp;key=Azfd6JNl&amp;token=919fddfe5c7e083893735e1043ca9d3f659f11467a69412'; 

それは、フォームが送信されるため、あなたの全体の機能を中断します。

何がやりたいことはあなたがまだ.preventDefault()を使用することができます

$("#new_video").attr("action", "http://upload.bitsontherun.com/v1/videos/upload?api_format=json&amp;key=Azfd6JNl&amp;token=919fddfe5c7e083893735e1043ca9d3f659f11467a69412"); 
+0

+1 - 良いキャッチ。 –

+0

ああ!それは良いキャッチです。ありがとう!私はエラーのためにコンソールをチェックしていただろうが、コンソールは全く新しいページを見ていたので、フォームは送信されたのでエラーは見られなかった。ニース。 – Homan

2

です:

$("#new_video").submit(function(e){ 
    if ($("#uploadFile").val() != '') { 
     e.preventDefault(); 
     alert('before change'); 
     $("#new_video").attr("action", "http://upload.bitsontherun.com/v1/videos/upload?api_format=json&amp;key=Azfd6JNl&amp;token=919fddfe5c7e083893735e1043ca9d3f659f11467a69412"); 
     alert('after change'); 
    } 
}); 
0

してください、コードの下に試してみてください。

var nextAction="http://upload.bitsontherun.com/v1/videos/upload?api_format=json&amp;key=Azfd6JNl&amp;token=919fddfe5c7e083893735e1043ca9d3f659f11467a69412"; 
    $("#new_video").attr("action",nextAction) ; 
関連する問題