2015-07-15 3 views
1

Я АНИ, который производит пользовательский первенствует файл на основе параметров запроса:перехватывают с помощью JavaScript

Вот вызов для файла Excel:

window.location = Service.API_ENDPOINT + '/report/GetAReport' + generateQueryParams(); 

Вопрос заключается в том, что иногда нет данных для заполнения электронной таблицы (которая соответствует параметрам запроса), и пользователь загружает пустую электронную таблицу. В этих случаях я хотел бы открыть сообщение, в котором говорится что-то вроде «никаких результатов для ваших параметров». Вопрос в том, как это сделать.

Я думал, что я могу настроить api, чтобы вернуть что-то другое, кроме файла, если нет результатов запроса (возможно, даже ошибка сервера), но как я могу воздействовать на него на стороне клиента? Я имею в виду, как мне изменить этот вызов, чтобы он загружал файл в случаях, когда он есть, но отображает сообщение, когда что-то еще отправляется сервером, и что должно быть «что-то еще»?

Заранее спасибо.

+1

Вы можете настроить сервер для ответа на запрос HEAD по этому пути, который возвращает 404, если это приведет к пустой электронной таблице, а затем выполнить запрос ajax, чтобы убедиться, что это не 404, прежде чем перенаправить пользователя в электронную таблицу. –

+0

@KevinB хм, запрос довольно трудоемкий, хотя. Любой способ сделать это без необходимости повторять одну и ту же логику на стороне сервера? – pQuestions123

+0

Не совсем, если вы не хотите скачать его clientide, как-то его проверить, а затем попытаться заставить браузер загрузить его с помощью атрибута загрузки и данных-uri (который не работает во всех браузерах) –

ответ

0

Вы можете выполнить запрос HEAD с той же конечной точкой и вернуть другой код состояния, если электронная таблица пуста.

Затем, прежде чем выполнять изменение window.location, выполните запрос AJAX с помощью метода HEAD. Если статус равен 200, продолжайте загрузку. Если это 302 (например), покажите предупреждение.

+0

hmm запрос довольно тем не менее, время. Любой способ сделать это без необходимости повторять одну и ту же логику на стороне сервера? – pQuestions123

+0

Вам не нужно делать 2 запроса, возможно, попробуйте это: Определите размер в байтах пустой таблицы. Я предполагаю, что пустая таблица всегда будет одного размера? Затем вместо того, чтобы window.location указывать на файл, выполните запрос ajax для файла. Если размер ответа соответствует размеру пустого файла, тогда отобразите ошибку. – dzylich

+0

Как сохранить файл и как его отправить для загрузки после того, как я определил, что у него есть данные? – pQuestions123

Смежные вопросы