Traitant de fichier de la pièce jointe en jquery.ajax

Dans ma page web, j'ai un bouton pour le téléchargement d'un fichier. Si il n'y a pas de fichier à télécharger, puis j'aimerais vous montrer un message tout en restant sur la même page. Le code javascript suivant fonctionne quand il y a un fichier à télécharger (id est l'id de fichier):

function downloadFile(id) {
    window.location = '/myapp.com/download_file/' + id;
}

Mon serveur enregistre le fichier contenu dans le corps de la réponse et des ensembles de 'Content-Disposition de" en "pièce jointe".

Maintenant, quand il n'y a pas de fichier j'aimerais revenir un peu de texte en disant qu'il n'y a pas de fichier à télécharger. Donc j'aimerais faire quelque chose comme ci-dessous:

function downloadFile(id) {
    $.ajax({
        url: '/myapp.com/download_file/' + id,
        success: function () {
            //if (attachemnt) {
            //   download file: just pass response to the browser?
            //} else {
            //   show error text
            //}
        },
        error: function () {
          //show error message
        }
    });
}

Donc, ma question est:

  1. Comment puis-je mettre en œuvre le au-dessus de la fonctionnalité?
  2. Plus précisément, si il y a un fichier de la pièce jointe dans la réponse, est-il possible de transmettre la réponse au navigateur, de sorte que le navigateur peut gérer téléchargement de fichier?

Mise à JOUR:
Je peux gérer "pas de fichier" cas maintenant:

$.ajax({
    url: '{{ path('download_prev_other_data', {'other_data_id':form.vars.value.getOtherDataId() }) }}',
    success: function (data, textStatus, jqXHR) {
        var header = jqXHR.getResponseHeader('Content-Disposition');
        if (header && header.indexOf('attachment') === 0) {
            //pass the original response to the browser
        } else {
            alert(data); //data is just text in my case explaining there was no file
        }
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert(errorThrown);
    }
});

Donc, ma 2ème question, "comment transmettre l'original de la réponse au navigateur" n'est pas encore répondu.

OriginalL'auteur synergetic | 2013-08-14