1

フォームで ajax を使用する必要があります。しかし、$.ajax の成功関数は、ファイルをサポートしていないようです。今、私はどのようにajaxを使用できるか知りたいです。フォームを返すとき(フォームが有効でないとき)と、ダウンロードのためにクライアントにストリームを返すとき(フォームが有効なとき)です。私はグーグルをしましたが、 $.get でうまくいくようです。しかし、私にはフォームがあり、ポストを使用する必要があります。誰か助けてくれませんか?どうもありがとう。

以下の関数では、ストリームは機能しません。

$('#sendButton').click(function(e) {
        e.preventDefault();
        var temp = $("#mainForm").serialize();
        $.ajax({
            type: "POST",
            data: temp,
            url: 'main/',
            success: function(data) {                
               ...
            }
        });
    });

私のviews.py:

def mainFunc(request):
    if request.is_ajax():
         form = mainForm(request.POST)
         if request.method == 'POST':
             if form.is_valid():
                 result = ""               
                 string_to_return = webservice._result
                 file_to_send = ContentFile(string_to_return)
                 response = HttpResponse(file_to_send,'application/x-gzip')
                 response['Content-Length'] = file_to_send.size
                 response['Content-Disposition'] = 'attachment;                  filename="somefile.tar.gz"'
                 return response
          else:
               form = mainForm()
          return render_to_response('main.html', RequestContext(request, {'form':form}))
     else:
          return render_to_response("ajax.html", {}, context_instance=RequestContext(request))
4

1 に答える 1

1

ファイルを ajax リクエストに返すことはまだできません。答えは昨日から変わらない

できることは、ダウンロード用の URL を返し、ユーザーをリダイレクトするか、新しいウィンドウ/タブを開くことです。このような

$('#sendButton').click(function(e) {
    e.preventDefault();
    var temp = $("#mainForm").serialize();
    $.ajax({
        type: "POST",
        data: temp,
        url: 'main/',
        success: function(data) {
           # Option 1 - redirect
           window.location = data;
           # Option 2 - new window
           window.open(data, '_blank');
           window.focus();
        }
    });
});
于 2012-12-02T09:13:24.233 に答える