Использование XMLHttpRequest для сокращения URL-адреса с помощью Google Shortener API

Я пытался сделать это через jQuery/ajax, но это не сработало, поэтому я подумал, что вернусь к обычному XMLHttpRequest. К сожалению, он все еще не работает (такая же проблема).

Вот документы для запроса Google POST. И вот мой код:

var xmlHttp = new XMLHttpRequest();

xmlHttp.open("POST", "https://www.googleapis.com/urlshortener/v1/url", true);
xmlHttp.setRequestHeader("Content-Type", "application/json");

var url = "longUrl=" + encodeURIComponent("http://www.google.com/");
console.log(url);

xmlHttp.send(url);

"url" отправляется в консоль как: longUrl=http%3A%2F%2Fwww.google.com%2F

Ответ:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "parseError",
    "message": "Parse Error"
   }
  ],
  "code": 400,
  "message": "Parse Error"
 }
}

Кто-нибудь видит, что я делаю неправильно?

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

Изменить: добавлено для @Greg, чтобы вы могли видеть, что я соблюдаю спецификацию Google, когда использую jQuery, что приводит к ТОЧНОЙ ТОЧНОЙ ошибке.

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: { "longUrl": "http://www.google.com/" },
    url: "https://www.googleapis.com/urlshortener/v1/url",
    success: function(data) {
        //do something with the shortened url json data
        //console.log(data);
    }
});

person RobertJoseph    schedule 02.10.2012    source источник


Ответы (2)


Вот решение (комментарий от @Greg указал мне правильное направление).

var xmlHttp = new XMLHttpRequest();

xmlHttp.open("POST", "https://www.googleapis.com/urlshortener/v1/url", true);
xmlHttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");

var req = new Object();
req.longUrl = "http://www.google.com/";

var jsonStr = JSON.stringify(req);

xmlHttp.send(jsonStr);
person RobertJoseph    schedule 02.10.2012

Вы не следуете спецификации, которую предоставляет Google. Вы должны отправить объект JSON следующим образом:

{"longUrl": "http://www.google.com/"}
person gcochard    schedule 02.10.2012