web-dev-qa-db-ja.com

AJAXを使用してjQueryを使用してExcelデータを送信する

データベースからデータを取得する次の機能があります。 ajax呼び出しは正常に機能しています。成功関数のタブ区切りデータをユーザーに送信するにはどうすればよいですか?接続タイプを「application/vnd.ms-Excel」に設定しても機能しませんでした。成功のアラートは、正しくフォーマットされたデータを示します。

     function SendToExcel() {
       $.ajax({
           type: "GET",
           url: "/Search.aspx",
           contentType: "application/vnd.ms-Excel",
           dataType: "text",
           data: "{id: '" + "asdf" + "'}",
           success: function(data) {
              alert(data);
           },
           error: function (jqXHR, textStatus, errorThrown) {
              alert(jqXHR.responseText);
       }});
     }

ブラウザーにデータを表示したくない-Excelに送信したい。

編集:やりたいことをする方法を見つけました。ユーザーをExcelファイルを保存/開くように促す新しいページにリダイレクトする代わりに、非表示のiframe内でページを開きました。これにより、ユーザーはボタンをクリックし、Excelファイルを保存/開くように求められます。ページのリダイレクトはありません。 Ajaxですか?いいえ、しかしそれは私が抱えていた本当の問題を解決します。

ボタンクリックで呼び出す関数は次のとおりです。

     function SendToExcel() {
        var dataString = 'type=Excel' +
            '&Number=' + $('#txtNumber').val() + 
            '&Reference=' + $('#txtReference').val()

        $("#sltCTPick option").each(function (i) {
             dataString = dataString + '&Columns=' + this.value;
        });

        top.iExcelHelper.location.href = "/Reports/JobSearchResults.aspx?" + dataString;;
     }
33
Jim

AJAXは...間違った選択です。適切なMIMEタイプを使用してデータを送信するサーバーリソースにユーザーをリダイレクトし、ブラウザにその処理を理解させます。

14
Shog9

hTMLでは、シリアル入力要素とJavaScript関数onclick="exportExcel();を呼び出すボタンを持つフォームがあります


function exportExcel(){
    var inputs = $("#myForm").serialize();
    var url = '/ajaxresponse.php?select=exportExcel&'+inputs;
    location.href = url;
}

最後に、何かに応答するピボットファイル

PHPコード:

case 'exportExcel':{
                     ob_end_clean();
                     header("Content-type: application/vnd.ms-Excel");
                     header("Content-Disposition: attachment;
                     filename=exportFile.xls");
                     echo $html->List($bd->ResultSet($_GET));
                }

$ htmlはhtmlを処理するオブジェクトであり、$ bdはデータベースからデータを返すオブジェクトであり、独自のhtmlテーブルまたは必要なものを送信します。

5
fernando

JavaScriptを使用しているため、AJAXは、クライアントのマシン上の他のプロセスとの対話を含むJavaScriptの設計上の制限に拘束されます。この場合、それは良いことです。悪意のあるマクロを含むExcelドキュメントを自動的にロードできるようにする。

ブラウザでデータを表示する場合は、AJAXを使用できます。それ以外の場合は、Excelドキュメントへのリンクを指定し、ブラウザの通常のダウンロード処理機能に何をすべきかを判断させます。

2
Randy

Javascriptでこれを行いたくない場合があります。

あなたがやりたいと思うのは、鉱山タイプapplication/csvで応答ページを作成し、ユーザーをそのページにリダイレクトすることです。ユーザーが現在表示しているページを失うことはないため、おそらくwindow.open()を実行します。

0
Sugendran