2009-09-12 6 views
2

Je l'ai regardé à travers des questions sur simiilar SO, mais ne peut pas sembler trouver un adressage ce qui semble être un simple appel ..Créer TinyURL via Ajax JQuery appel

function TweetThis(url) 
{ 
    $.ajax({ 
     url: "http://tinyurl.com/api-create.php?url=" + url, 
     cache: false, 
     success: function(data){ 
     alert(data); 
     } 
    }); 
} 

Fondamentalement, je veux appeler avec TinyURL un appel Ajax et une longue URL et renvoyer l'URL raccourci .. Le succès ne se déclenche jamais, mais quand je vérifie l'URL qu'il construit, il renvoie bien dans un navigateur.

Si vous cherchez dans Firebug, la réponse ne s'affiche pas. Que manque-t-il?

Répondre

1

Dans Safari 4 (Mac OS X), cela fonctionne correctement.
Dans Firefox 3 (Mac OS X), il fonctionne à moitié - une boîte de dialogue alert apparaît, mais elle est vide (donc success est en cours de lancement, mais aucune donnée n'est retournée).
Il semble que ce soit un bug de Firefox alors.

+0

Ne fonctionne pas sur FF3 pour Windows ... Je pensais que c'était peut-être un problème avec TinyURL mais j'ai essayé un autre fournisseur avec les mêmes résultats. – stonedonkey

0

Cela devrait fonctionner

function TweetThis(url){ 
    $.get(
     "http://tinyurl.com/api-create.php", 
     {url: url}, 
     function(data){ 
      alert(data); 
     } 
    ); 
} 
+1

Non. Cela ne fonctionnera pas, à cause de la politique de même origine. http://en.wikipedia.org/wiki/Same_origin_policy – Cheeso

+0

Cela dépend si elles ont correctement configuré le serveur: http://www.kendoui.com/blogs/teamblog/posts/11-10-04/using_cors_with_all_modern_browsers.aspx – SeanJA

+0

@SeanJA Votre lien est mort. Et votre extrait de code ne fonctionne pas ("l'origine n'est pas autorisée"). – mhenry1384

1

Avez-vous essayé d'ajouter &callback=? à la fin de l'URL? Il pourrait s'agir de la sécurité du navigateur.

4

Tenter de faire une requête AJAX régulière est impossible en raison des restrictions same origin policy. Heureusement, il y a un JSONPAPI gracieuseté de Remy Sharp.

code de travail est ici:

function TweetThis(bigurl) 
{ 
    $.getJSON(
     "http://json-tinyurl.appspot.com/?&callback=?", 
     {url: bigurl}, 
     function(data){ 
     alert(data.tinyurl); 
     } 
    ); 
} 
+3

Attention; cette application appspot est limitée à la demande. Il peut ne pas être utilisable dans un cas général. – Cheeso

1

Essayez celui-ci.

Le script:

<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> 

maintenant la forme:

<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> 

Maintenant le fichier d'aide:

<? 
//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> 
2

jamais utilisé, mais peut-être la peine de vérifier. http://tiny-url.info/open_api.html

Si vous avez la capacité d'ajouter une logique à côté du serveur, vous pouvez éviter l'exigence de JSONP en installant un « shim » ou d'un script de passerelle qui fait ce que vous voulez, et renvoie une chaîne JSON formaté.

quelques exemples de scripts qui produisent tinyurls en appelant l'API tinyurl.com:

Tout le monde peut prendre ce code et l'héberger eux-mêmes pour permettre à des pages Web d'accéder au service TinyURL. La même approche fonctionne pour tout service qui n'est pas accessible via JSONP.

Questions connexes