Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:
function foo() {
var result;
$.ajax({
url: '...',
success: function(response) {
myCallback(response);
}
});
return result;
}
function myCallback(response) {
// Does something.
}
Если я правильно понимаю, вы хотите, чтобы ваши пользователи увидели приглашение Open/Save As
, когда они нажимают на URL SAS.
Предполагая, что мое понимание верное, недавно Windows Azure Storage анонсировала некоторые улучшения. Одним из улучшений является добавление свойства Content-Disposition
для blob, которое позволило бы этому приглашению Open/Save As
показать, когда пользователь нажимает ссылку SAS для blob. С помощью Content-Disposition
у вас есть 2 варианта:
Content-Disposition
как свойство blob: В этом случае, когда пользователь нажимает на ссылку SAS, им будет предложено сохранить файл. Но в этом случае они всегда будут запрашиваться, так что ссылка SAS или нет, пользователь никогда не сможет увидеть документ в строке в браузере. Вы можете найти эту ссылку полезной для этого: http://msdn.microsoft.com/en-us/library/windowsazure/ee691966.aspx . Content-Disposition
как часть URL SAS: в этом случае пользователь будет запрашиваться только при нажатии на URL SAS, который содержит Content-Disposition
. Вы можете найти эту ссылку полезной для этого: http://msdn.microsoft.com/en-us/library/windowsazure/dn140255.aspx . So если у вас есть png-файл. В варианте 1 он никогда не будет отображаться встроенным в браузере, он будет загружен на клиентской машине и открыт в зарегистрированном средстве просмотра изображений на вашем компьютере. В варианте 2, если Content-Disposition
установлен в URL SAS, файл изображения будет загружен на клиентском компьютере и открыт в зарегистрированном средстве просмотра изображений на вашем компьютере, иначе он будет отображаться непосредственно в браузере.
Если вы используете .Net, то в библиотеке Client Storage 3.0.0.0 есть поддержка этой функции, поэтому вам не нужно писать обертку вокруг REST API (но я думаю, что вы используете PHP ... из своего предыдущего вопроса о CORS:)).
Чтобы избежать перезагрузки / перенаправления, я использую эту библиотеку:
http://jqueryfiledownload.apphb.com/
Если вы нужна помощь для его настройки : http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/
Но если вы хотите перенаправить пользователя, вы можете использовать базовую вещь, например:
window.location.href = "http://stackoverflow.com/file.pdf";
То, как я это делал в прошлом, - это открыть скрытый iframe с URL-адресом для загрузки.
Что-то вдоль строк
var frame = document.createElement('iframe');
frame.src = url; // your Azure url
frame.style.display = 'none';
document.body.appendChild(frame);
Примечание. что вам нужно будет убедиться, что вы не пытаетесь сделать это на защищенной (https) странице с небезопасной загрузкой (http)