2013-04-18 13 views
2

Je rencontre actuellement des problèmes pour raccourcir une URL avec le raccourci Google URL. J'utilise CoffeeScript mais le code généré semble bon. Voici ce que je fais:Google URL Shortener Bad Request avec jQuery

shortenUrl = (longUrl) -> 
    $.ajax(
    type: 'POST' 
    url: "https://www.googleapis.com/urlshortener/v1/url?key=myAPIkey" 
    data: 
     longUrl: longUrl 
    dataType: 'json' 
    success: (response) -> 
     console.log response.data 
    contentType: 'application/json' 
); 

Le code généré est:

shortenUrl = function(longUrl) { 
    return $.ajax(console.log({ 
    longUrl: longUrl 
    }), { 
    type: 'POST', 
    url: "https://www.googleapis.com/urlshortener/v1/url?key=myAPIkey", 
    data: { 
    longUrl: longUrl 
    }, 
    dataType: 'json', 
    success: function(response) { 
    return console.log(response.data); 
    }, 
    contentType: 'application/json' 
}); 

};

Voici l'erreur que je reçois dans la console JS Chrome:

POST https://www.googleapis.com/urlshortener/v1/url?key=myAPIkey 400 (Bad Request) 

(précisément, il y a apparemment une erreur Parse)

Notez que, quand j'exécute une demande boucle comme ceci:

curl https://www.googleapis.com/urlshortener/v1/url?key=myAPIkey \ 
    -H 'Content-Type: application/json' \ 
    -d '{longUrl: "http://www.google.com/"}' 

Cela fonctionne comme un charme. Et je reçois:

{ 
    "kind": "urlshortener#url", 
    "id": "http://goo.gl/fbsS", 
    "longUrl": "http://www.google.com/" 
} 

Alors, quel est le problème avec ce jQuery? (J'utilise 1.9.x version)

EDIT: Voici la bonne façon de le faire avec jQuery:

shortenUrl = function(longUrl) { 
    return $.ajax(console.log({ 
     longUrl: longUrl 
    }), { 
    type: 'POST', 
    url: "https://www.googleapis.com/urlshortener/v1/url?key=myAPIkey", 
    data: '{ longUrl: longUrl }', // <-- string here 
    dataType: 'json', 
    success: function(response) { 
     return console.log(response.data); 
    }, 
    contentType: 'application/json' 
    }); 
}; 
+0

Face à même question en rubis, s'il vous plaît regarder le lien ci-dessous, http://stackoverflow.com/a/23562091/344993 – Parth

Répondre

1

Ok .. Je viens de découvrir où était mon erreur. Désolé pour cela, je ne pouvais pas imaginer que jQuery était si $

la variable de données que je passe est en fait un objet Js (que j'ai supposé qu'il a été interprété comme JSON sur le serveur ... elle ne l'était pas)

data param doit être une chaîne contenant "plain" json.

Maintenant, il fonctionne :)

+0

avez-vous modifié votre erreur? S'il vous plaît poster le bon code. –

+0

La manière correcte de le faire est dans la requête cURL. Les données passées dans le paramètre 'data' (dans l'objet jQuery ajax) doivent être une chaîne (contenant json), et PAS un objet javascript. Je vais l'éditer, désolé. – TheCypher