AJAX不是以JSON格式发布的

时间:2014-12-08 17:56:34

标签: javascript jquery ajax json

使用https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js 我有以下内容尝试将JSON请求发布到Google的URL Shortener

$.ajax({
  type: "POST",
  dataType: "json",
  contentType: "application/json",
  url: "https://www.googleapis.com/urlshortener/v1/url",
  data: { longUrl: "http://some.url" }
})
  .done(function( msg ) {
    console.log( msg );
  });

由于请求格式不正确,因此返回400错误。看着提琴手中的请求,我可以看到它就像这样;

POST https://www.googleapis.com/urlshortener/v1/url HTTP/1.1
Host: www.googleapis.com
Connection: keep-alive
Content-Length: 29
Pragma: no-cache
Cache-Control: no-cache
Accept: application/json, text/javascript, */*; q=0.01
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36
Content-Type: application/json
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,en-GB;q=0.6,fr;q=0.4

longUrl=http%3A%2F%2Fsome.url

我可以将请求修改为以下内容,其工作原理(不包括标题);

{ longUrl=http://some.url }

那么为什么ajax没有将数据格式化为JSON?

3 个答案:

答案 0 :(得分:3)

jQuery不会为您将对象转换为JSON字符串。 dataType用于响应,contentType用于服务器的好处。您仍然必须将数据序列化为JSON:

$.ajax({
/* ... */
  data: JSON.stringify({ longUrl: "http://some.url" })
})

答案 1 :(得分:1)

您尝试过:JSON.stringify

这样的事情:

data: JSON.stringify({ longUrl: "http://some.url" })

答案 2 :(得分:0)

如果您将json对象作为字符串传递,则您的请求将返回ok,例如我使用此url http://goo.gl/UXeQ返回了一个对象。

请参阅http://jsfiddle.net/3oy3c5tq/

$.ajax({
  type: "POST",
  dataType: "json",
  contentType: "application/json",
  url: "https://www.googleapis.com/urlshortener/v1/url",
  data: '{ longUrl: "http://some.url" }'
})
  .done(function( msg ) {
    console.log( msg );
  });