2010-11-23 1 views
2

これは、ファイルダウンロードのためのリンクを1つ作成しようとしていると同時に、ajaxで投稿フォームを送信しようとしています。 はちょっと次のようになります。

<form action="" method="post" id="form"> 
    <input type="text" name="email" id="email" value="" /> 
    <input type="hidden" name="subscriber" id="subscriber" value="newsletter" /> 
    <a href="/files/application.exe" id="download">trial download</a> 
</form> 
<script type="text/javascript" src="jquery"></script> 
<script type="text/javascript"> 
    // prevent default submit action caused by enter key etc. 
    $("#form").bind('submit',function(event){event.preventDefault();}); 
    $('#download').click(function(){ 
     $.post(location.href, $('#form').serialize(), function(){ 
      $('#form').hide(); 
     }); 
    }); 
</script> 

問題はそのダウンロード火災であり、それはダウンロードダイアログを示して - 正しいです - それはそれは上に、また、クリックイベントを発生しても、クリックイベント関数内でログコンソールう投稿要求も起動しますが、投稿要求は決してサーバーで終わることはありません。私はtail -fのアクセスログファイルを持っていましたが、$ .post()のPOSTではなく、application.exeにはGETしか表示されませんでした。 Firebugには、location.hrefによって指定されたPOST http://ip/folder/が表示され、赤色でXと少し空白の応答フィールドが表示されます。火かき棒のための厳しいそれはサーバに送られたように見える...

私の説明はこれはhrefが$ .post()から風を取り除き、それが発射される前にブラウザをダウンロードにリダイレクトすることですファイル。ページ自体は変更されませんが、XHRでの投稿の処理は停止します...

誰もがこのために良い回避策を知っていますか?私は本当にIEにこの愚かなファイルのダウンロード警告バーを表示させないようにアプリケーションにネイティブのhrefリンクが必要ですと同時に私はフォームを提出するためには、ajaxが必要です...

ありがとう!

答えて

2

リファクタリング次のように、デフォルトのリンクのクリック動作を防ぐためにfalseを返す:

$('#download').click(function(){ 
    var href = $(this).attr('href'); 
    $.post(location.href, $('#form').serialize(), function(){ 
     $('#form').hide(); 
     document.location.href= href; 
    }); 
    return false; 
}); 
+0

いくつかの理由はポストサイドで動作しますが、成功関数を発射しません...うーん。 – Tobias

+0

ええ、何らかの理由で成功のコールバックdoesntは発射されます。サーバはdie( '{success:1}')を返します。今のところAJAXで何が起きても...私は火かき棒で反応を見るが、成功のコールバックはまったく呼び出されない...変だ。 – Tobias

+0

私はheader( 'Content-Type:application/json')を削除しました。レスポンスから今度は成功コールバックを発射します... w.t.f. – Tobias

0

自分の質問に動作するもの答えを与えるために:

$('#download').click(function(){ 
    setTimeout(function(){ 
     $.post(location.href, $('#form').serialize(), function(){ 
      $('#form').hide(); 
     }); 
    },1000); 
}); 

タイムアウト後.postを発射ダウンロード要求が発生... sortof作品...しかし、私はそれが良い解決策か、それが時間の50%を失敗する可能性があるかどうかわからない&ブラウザ...

関連する問題