データベースからデータを取得する次の機能があります。 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;;
}
AJAXは...間違った選択です。適切なMIMEタイプを使用してデータを送信するサーバーリソースにユーザーをリダイレクトし、ブラウザにその処理を理解させます。
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テーブルまたは必要なものを送信します。
JavaScriptを使用しているため、AJAXは、クライアントのマシン上の他のプロセスとの対話を含むJavaScriptの設計上の制限に拘束されます。この場合、それは良いことです。悪意のあるマクロを含むExcelドキュメントを自動的にロードできるようにする。
ブラウザでデータを表示する場合は、AJAXを使用できます。それ以外の場合は、Excelドキュメントへのリンクを指定し、ブラウザの通常のダウンロード処理機能に何をすべきかを判断させます。
Javascriptでこれを行いたくない場合があります。
あなたがやりたいと思うのは、鉱山タイプapplication/csvで応答ページを作成し、ユーザーをそのページにリダイレクトすることです。ユーザーが現在表示しているページを失うことはないため、おそらくwindow.open()を実行します。