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 を返したいと考えています。

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

サーバー側にロジックを追加できる場合は、必要な処理を実行し、フォーマットされた JSON 文字列を返す「shim」またはゲートウェイ スクリプトをインストールすることで、JSONP の要件を回避できます。

tinyurl.com の API を呼び出して tinyurl を生成するスクリプトの例:

誰でもそのコードを取得してホストし、Web ページが tinyurl サービスにアクセスできるようにすることができます。JSONP 経由でアクセスできないすべてのサービスに対して、同じアプローチが機能します。

于 2012-03-21T16:59:09.733 に答える
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 に答える
1

&callback=?URL の末尾に追加してみましたか? ブラウザのセキュリティが邪魔している可能性があります。

于 2009-10-13T04:27:48.577 に答える
0

これはうまくいくはずです

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