使用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?
答案 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 );
});