我已经查看了关于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,它没有显示回复的反应..我错过了什么?
答案 0 :(得分:4)
由于same origin policy限制,尝试发出常规AJAX请求是不可能的。 幸运的是JSONP API提供了Remy Sharp {{3}}。
这是工作代码:
function TweetThis(bigurl)
{
$.getJSON(
"http://json-tinyurl.appspot.com/?&callback=?",
{url: bigurl},
function(data){
alert(data.tinyurl);
}
);
}
答案 1 :(得分:2)
从未使用它,但也许值得一试。 http://tiny-url.info/open_api.html
如果您能够向服务器端添加逻辑,则可以通过安装执行所需操作的“填充程序”或网关脚本来避免对JSONP的要求,并返回格式化的JSON字符串。
通过调用tinyurl.com的API生成tinyurl的脚本的一些示例:
任何人都可以接受该代码并自行托管,以允许网页访问tinyurl服务。相同的方法适用于无法通过JSONP访问的任何服务。
答案 2 :(得分:1)
在Safari 4(Mac OS X)中,它运行正常
在Firefox 3(Mac OS X)中,它有一半工作 - 出现alert
对话框,但它是空的(因此success
正在触发,但没有返回数据)。
这似乎是一个Firefox错误。
答案 3 :(得分:1)
您是否尝试在网址末尾添加&callback=?
?它可能会妨碍浏览器的安全性。
答案 4 :(得分:1)
试试这个。
剧本:
<script language="javascript" type="text/javascript">
<!--
var ajaxRequest; // The variable that makes Ajax possible!
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser is very old!");
}
}
}
//Browser Support Code
function ajaxGetTiny(){
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
var ajaxDisplay = document.getElementById('ajaxDisplayTiny');
ajaxDisplay.innerHTML = ajaxRequest.responseText;
}
}
var long_url = document.getElementById('long_url').value;
var queryString = "?long_url=" + long_url;
ajaxRequest.open("GET", "getTiny.php" + queryString, true);
ajaxRequest.send(null);
}
function ClipBoard()
{
holdtext.innerText = copytext.innerText;
Copied = holdtext.createTextRange();
Copied.execCommand("Copy");
}
//-->
</script>
现在形式:
<form name='myForm'>
<input name="long_url" type="text" class="main" size="90">
<br>
<input type='button' class="Buttons" onclick='ajaxGetTiny();' value='GET TINY' />
</form>
现在是帮助文件:
<?
//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']);
?>
<link href="../styles.css" rel="stylesheet" type="text/css" />
<table width="100%" border="0" class="main">
<tr>
<td width="5%" align="left" valign="middle"><strong>longURL:</strong></td>
<td width="95%" valign="middle" class="ArticleBody"><? echo $_GET['long_url']; ?></td>
</tr>
<tr>
<td align="left" valign="middle"><strong>tinyURL:</strong></td>
<td valign="middle" class="ArticleBody"><SPAN ID="copytext"><? echo $new_url; ?></SPAN>
<TEXTAREA ID="holdtext" STYLE="display:none;"></TEXTAREA><br>
<BUTTON onClick="ClipBoard();">Copy to Clipboard</BUTTON>
</td>
</tr>
</table>
答案 5 :(得分:0)
这应该有效
function TweetThis(url){
$.get(
"http://tinyurl.com/api-create.php",
{url: url},
function(data){
alert(data);
}
);
}