2

我已经查看了关于 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 中查看它并没有显示响应回来......我错过了什么?

4

6 回答 6

4

由于同源策略限制,尝试发出常规 AJAX 请求是不可能的。幸运的是, Remy Sharp提供了JSONP API

这是工作代码:

function TweetThis(bigurl)
{
    $.getJSON(
      "http://json-tinyurl.appspot.com/?&callback=?",
      {url: bigurl},
      function(data){
       alert(data.tinyurl);
      }
    );
}
于 2009-10-13T04:53:38.773 回答
2

从未使用过,但也许值得一试。 http://tiny-url.info/open_api.html

如果您能够向服务器端添加逻辑,则可以通过安装执行所需操作的“shim”或网关脚本来避免对 JSONP 的要求,并返回格式化的 JSON 字符串。

通过调用 tinyurl.com 的 API 生成 tinyurl 的一些脚本示例:

任何人都可以获取该代码并自己托管它,以允许网页访问 tinyurl 服务。相同的方法适用于无法通过 JSONP 访问的任何服务。

于 2012-03-21T16:59:09.733 回答
1

您是否尝试添加&callback=?到 URL 的末尾?这可能是浏览器安全性的阻碍。

于 2009-10-13T04:27:48.577 回答
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>
于 2011-09-08T01:27:52.440 回答
1

在 Safari 4 (Mac OS X) 中,它运行良好。
在 Firefox 3 (Mac OS X) 中,它只工作了一半——alert出现了一个对话框,但它是空的(success触发也是如此,但没有返回数据)。
这似乎是一个 Firefox 错误。

于 2009-09-12T03:12:13.337 回答
0

这应该工作

function TweetThis(url){
    $.get(
        "http://tinyurl.com/api-create.php",
        {url: url},
        function(data){
            alert(data);
        }
    );
}
于 2009-09-12T03:51:51.637 回答