Ответ 1
AJAX - это неправильный выбор. Перенаправьте пользователя на ресурс сервера, который будет отправлять данные с соответствующим типом MIME, и пусть браузер выяснит, что с ним делать.
У меня есть следующая функция, которая извлекает данные из базы данных. Звонок ajax работает правильно. Как я могу отправить данные с разделителями табуляции в мою функцию успеха пользователю? Установка типа contect на "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.
EDIT: Я нашел способ делать то, что хотел. Вместо того, чтобы перенаправить пользователей на новую страницу, которая предложит им сохранить/открыть файл 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(), так как пользователь не потерял страницу, в которой они сейчас находятся.