37

データベースからデータを取得する次の関数があります。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 ファイルを保存または開くように求められます。ページのリダイレクトなし。アヤックスですか?いいえ、しかしそれは私が抱えていた本当の問題を解決します。

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

     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;;
     }
4

4 に答える 4

13

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

于 2008-09-29T17:51:37.197 に答える
6

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


次にJavaScriptファイルで:

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 テーブルなどを送信します。

于 2010-12-15T22:26:41.480 に答える
2

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

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

于 2008-09-29T17:58:08.740 に答える
0

これを JavaScript で行いたくない可能性があります。

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

于 2008-09-29T23:28:35.997 に答える