2011-07-02 2 views
2

C'est ce que je suis en train:la difficulté à obtenir les en-têtes de réponse jQuery AJAX

$.ajax({ 
    type: 'GET', 
    url: 'http://imgur.com/upload/', 
    data: { 
    url: 'http://upload.wikimedia.org/wikipedia/commons/3/3e/Phalaenopsis_JPEG.png' 
    }, 
    complete: function(jqXHR, textStatus) { 
    console.log(jqXHR.getAllResponseHeaders()); 
    } 
}); 

je reçois juste une chaîne vide.

Toute aide serait appréciée.

Edit:

Ce sont les en-têtes de réponse que je peux voir dans Firebug:

 
Server: nginx 
Date: Sat, 02 Jul 2011 03:04:26 GMT 
Content-Type: text/html; charset=utf-8 
Transfer-Encoding: chunked 
Connection: close 
Set-Cookie: IMGURSESSION=asdfasdfasdfasdf; path=/; domain=.imgur.com 
SERVERID=www4; path=/ 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Location: http://imgur.com/ocuVX 
Content-Encoding: gzip 
Vary: Accept-Encoding

Répondre

5

que j'ai trouvé une solution ici: https://hacks.mozilla.org/2011/03/the-shortest-image-uploader-ever/

function upload(url) { 
    // Let's build a FormData object 

    var fd = new FormData(); 
    fd.append("image", url); // Append the file 
    fd.append("key", "6528448c258cff474ca9701c5bab6927"); 
    // Get your own key: http://api.imgur.com/ 

    // Create the XHR (Cross-Domain XHR FTW!!!) 
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", "http://api.imgur.com/2/upload.json"); // Boooom! 
    xhr.onload = function() { 
    // Big win! 
    // The URL of the image is: 
    JSON.parse(xhr.responseText).upload.links.imgur_page; 
    } 
    // Ok, I don't handle the errors. An exercice for the reader. 
    // And now, we send the formdata 
    xhr.send(fd); 
} 

Évidemment, cette solution nécessite un POST, ce qui signifie que vous devez utiliser une clé API. Je n'ai trouvé aucun moyen d'obtenir une réponse avec la méthode GET API-Keyless.

La seule façon que je parvenais à faire un téléchargement sans une clé API était de passer par YQL et obtenir l'URL de redirection finale à partir du diagnostic:

urlToImgur = (url, callback) -> 
    upload_url = "http://api.imgur.com/2/upload?url=#{url}" 
    $.ajax 
    url: 'http://query.yahooapis.com/v1/public/yql' 
    dataType: 'jsonp' 
    data: 
     q: "select none from html where url='#{upload_url}'" 
     diagnostics: true 
    success: (data) -> 
     redirects = data.query.diagnostics.redirect 
     image_url = redirects[redirects.length-1].content 
     callback image_url 
1

Est-ce JSONP appeler? Vous n'obtiendrez aucun en-tête alors. Voir aussi ceci: jqXHR.getAllResponseHeaders() won't return all headers

+0

« type ': « GET'' ». – Acorn

+0

Peu importe. Si c'est crossdomain, il ira automatiquement comme JSONP. Si vous pouvez dire exactement ce que vous essayez, alors peut-être que je peux aider mieux. – Mrchief

+0

Oh, à droite, je ne savais pas que jQuery le ferait automatiquement. Ce que j'essaye de faire est simplement d'envoyer une requête GET à cette URL avec le paramètre url. Je dois ensuite obtenir le "Lieu" des en-têtes de réponse. J'ai ajouté les en-têtes de réponse à ma question. – Acorn

0

Assurez-vous que vous utilisez> jQuery 1.5 et assurez-vous d'ajouter crossdomain: true à votre ajax attributs