我正在尝试通过进行AJAX调用在jQuery的帮助下实现Google URL缩短器API。我做过类似的事情:
$(function() {
$('#btnshorten').click(function() {
var longURL = $('#tboxLongURL').val();
$.ajax({
url: 'https://www.googleapis.com/urlshortener/v1/url?shortUrl=http://goo.gl/fbsS&key=AIzaSyANFw1rVq_vnIzT4vVOwIw3fF1qHXV7Mjw',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: '{ longUrl: "' + longURL +'"}',
dataType: 'json',
success: function(response) {
var result = eval(response); // Evaluate the J-Son response object.
}
});
});
});
但它在IE中产生错误。它显示“访问被拒绝”,在Firebug中显示“405方法不允许”。我在这里做错了吗?
答案 0 :(得分:17)
在Javascript中,以下是实现Google网址缩短API的两种方法:
方法#1:使用jsonlib,http://call.jsonlib.com/jsonlib.js
在此尝试:http://jsfiddle.net/Qh4eR/
var longUrl = "http://google.com";
document.write("Long Url: "+longUrl);
function googlurl(url, cb) {
jsonlib.fetch({
url: 'https://www.googleapis.com/urlshortener/v1/url',
header: 'Content-Type: application/json',
data: JSON.stringify({longUrl: url})
}, function (m) {
var result = null;
try {
result = JSON.parse(m.content).id;
if (typeof result != 'string') result = null;
} catch (e) {
result = null;
}
cb(result);
});
}
googlurl(longUrl , function(s) { document.write("<BR>Short Url: "+s); });
方法#2:使用Google客户端库https://apis.google.com/js/client.js
,请在此处试用:http://jsfiddle.net/pPHKe/2/
//var apiKey = 'YOUR_API_KEY';
//gapi.client.setApiKey(apiKey);
var longurl = 'http://www.google.com/';
gapi.client.load('urlshortener', 'v1', function() {
var request = gapi.client.urlshortener.url.insert({
'resource': {
'longUrl': longurl
}
});
var resp = request.execute(function(resp) {
if (resp.error) {
$("#show").html('Error. ' + resp.error.message);
} else {
$("#show").html("Short URL for "+longurl+" is: " + resp.id);
}
});
});
答案 1 :(得分:5)
你确实是,我害怕。由于浏览器安全性,您无法进行跨域ajax调用。
我知道Ext JS提供了一个可以完成工作的ScriptTagProxy对象,但我不确定jQuery是否有类似的东西。
另一种方法是在您自己的主机上创建一种“代理”服务器端脚本,它可以接受来自您的ajax调用的参数,创建一个HttpWebRequest或者类似于googleapis.com并输出要获取的响应再次通过你的ajax电话。然后只需修改您的ajax url参数即可调用新的代理脚本而不是googleapis。换句话说 - 让服务器端执行跨域请求。
答案 2 :(得分:0)