通过Jquery Ajax调用创建TinyURL
我已经查看了关于SO的类似问题,但似乎无法找到一个解决看似简单的电话的问题。
function TweetThis(url) { $.ajax({ url: "http://tinyurl.com/api-create.php?url=" + url, cache: false, success: function(data){ alert(data); } }); }
基本上我想用一个Ajax调用和一个长URL调用TinyURL并返回缩短的URL ..成功永远不会触发,但是当我检查它构建的URL时,它在浏览器中返回正常。
看着Firebug它没有显示回复的回复..我错过了什么?
由于相同的原始策略限制,尝试发出常规AJAX请求是不可能的。 幸运的是,有一个JSONP API由Remy Sharp提供 。
这是工作代码:
function TweetThis(bigurl) { $.getJSON( "http://json-tinyurl.appspot.com/?&callback=?", {url: bigurl}, function(data){ alert(data.tinyurl); } ); }
从未使用它,但也许值得一试。 http://tiny-url.info/open_api.html
如果您能够向服务器端添加逻辑,则可以通过安装执行所需操作的“填充程序”或网关脚本来避免对JSONP的要求,并返回格式化的JSON字符串。
通过调用tinyurl.com的API生成tinyurl的脚本的一些示例:
- PHP 。
- ASP经典
- C#中的ASPNET处理程序(ASHX)
- python/ CGI
任何人都可以接受该代码并自行托管,以允许网页访问tinyurl服务。 相同的方法适用于无法通过JSONP访问的任何服务。
在Safari 4(Mac OS X)中,它工作正常。
在Firefox 3(Mac OS X)中,它的一半工作 – 出现一个alert
对话框,但它是空的(因此success
触发,但没有返回数据)。
这似乎是一个Firefox bug。
试试这个。
剧本:
现在forms:
现在帮助文件:
//gets the data from a URL function get_tiny_url($url) { $ch = curl_init(); $timeout = 5; curl_setopt($ch,CURLOPT_URL,'http://tinyurl.com/api-create.php?url='.$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); $data = curl_exec($ch); curl_close($ch); return $data; } //test it out! $new_url = get_tiny_url($_GET['long_url']); ?> longURL: echo $_GET['long_url']; ?> tinyURL: echo $new_url; ?>
你有没有尝试添加&callback=?
到URL的末尾? 它可能会阻碍浏览器安全性。
这应该工作
function TweetThis(url){ $.get( "http://tinyurl.com/api-create.php", {url: url}, function(data){ alert(data); } ); }