4

クライアント側でボタンをクリックすると、AJAX を使用してサーバー側で public static webmethod を呼び出したいと思います。静的メソッドは、適切なファイルを作成します。ファイルが作成されたら、クライアント デスクトップにダウンロードする必要があります。John Culvinar の jquery filedownload プラグインを見つけましたが、今のところ実装できていません。このプラグインを使用するには、ダウンロードが完了したことを認識できるように Cookie を作成する必要があることも知っています。このコードはサーバー側のどこに配置すればよいですか? ファイルを作成した後ですか?おそらくjsfiddle.netで、誰かがこのシナリオのサンプルを見せてくれたらとてもうれしいです

4

2 に答える 2

2

ajaxリクエストを非表示のiframeに置き換えることをお勧めします。そうすると、サーバーがそのファイルを返すと、自動的にユーザーにダウンロードを求めます。

//name of iframe
var strName = ("uploader" + (new Date()).getTime());
// the iframe
var jFrame = $( "<iframe name=\"" + strName + "\" src=\"about:blank\" />" ).css( "display", "none" );

jFrame.load(function( objEvent ){     
    // at this point the user should have been asked to download a file.

    // Remove the iFrame from the document.
    // Because FireFox has some issues with
    // "Infinite thinking", let's put a small
    // delay on the frame removal.
    setTimeout(function(){
        jFrame.remove();
    },100);
});

var form = $('<form>').attr( "action", "upload_act.cfm" )
    .attr( "method", "post" )
    .attr( "enctype", "multipart/form-data" )
    .attr( "encoding", "multipart/form-data" )
    .attr( "target", strName );

form.append('<input type="hidden" name="somename">').val("someval");

$( "body:first" ).append( jFrame, form );

(上記のコードは、http://www.bennadel.com/blog/1244-ColdFusion-jQuery-And-AJAX-File-Upload-Demo.htmから元々採用されたものです)

別の方法は、それを2段階のプロセスにすることです。ステップ1でファイルを生成してURLを返し、ステップ2でユーザーがダウンロードをクリックします(これは、上記のURLを指すアンカータグになります)。

于 2012-12-19T18:34:19.430 に答える
1

ユーザー エクスペリエンスを向上させるために jquery プラグインを使用する場合、サーバーからダウンロードを開始することはできません。その場合の最善の策は、サーバー上でファイルを生成し、そのメソッドがファイルへのパスを返すようにすることです。次に、プラグインを使用して dl します。

例:

$('#btnID').click(function(){
$.ajax({
        type: "POST",
        url: "/your_webmethod_url",
        data: "{'webmethodParam1':'val1','webmethodParam2':'val2'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: fileGenerated,
        error: fileNotGenerated
    });
});

function fileGenerated(data, textStatus, jqXHR){
  //this is the success callback method.  start download automatically using the plugin
  $.fileDownload(data.d); //returned data from webmethod goes in data.d
}
function fileNotGenerated(jqXHR, textStatus, errorThrown){
  //this is the error callback method.  do something to handle the error
  alert(errorThrown);
}
于 2012-12-19T16:45:08.090 に答える