2009-09-12 3 views
2

Я просмотрел simiilar вопросов на SO, но не может найти один адресацию, что кажется простым вызовом ..Создать TinyURL с помощью вызова Jquery Ajax

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

В основном я хочу, чтобы позвонить TinyURL с вызов Ajax и длинный URL-адрес и возврат сокращенного URL-адреса. Успех никогда не срабатывает, но когда я проверяю URL-адрес, который он создает, он отлично восстанавливается в браузере.

Глядя в Firebug, он не показывает ответ, возвращающийся .. Что мне не хватает?

ответ

1

В Safari 4 (Mac OS X), он отлично работает.
В Firefox 3 (Mac OS X), он работает наполовину - диалог alert появляется, но он пуст (так что success уволен, но данные не возвращаются).
Кажется, это ошибка Firefox.

+0

Не работает на FF3 для меня в Windows ... Я думал, что это была проблема с TinyURL, но попробовал другой провайдер с теми же результатами. – stonedonkey

0

Это должно работать

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

Нет. Это не будет работать из-за политики того же происхождения. http://en.wikipedia.org/wiki/Same_origin_policy – Cheeso

+0

Это зависит от того, правильно ли они настроили сервер: http://www.kendoui.com/blogs/teamblog/posts/11-10-04/using_cors_with_all_modern_browsers.aspx – SeanJA

+0

@SeanJA Ваша ссылка мертва. И ваш фрагмент кода не работает («происхождение не разрешено»). – mhenry1384

1

Вы пытались добавить &callback=? в конце URL? Это может быть проблема безопасности браузера.

4

Попытка сделать обычный запрос AJAX невозможна из-за ограничений same origin policy. К счастью, есть JSONPAPI любезно предоставлено Remy Sharp.

Вот рабочий код:

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

Осторожно; это приложение apppot ограничено запросом. Он не может использоваться в общем случае. – Cheeso

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

никогда не использовал его, но, возможно, стоит проверить. http://tiny-url.info/open_api.html

Если у вас есть возможность добавить логику на стороне сервера, вы можете избежать требования для JSONP, установив «прокладку» или скрипт шлюза, который делает то, что вы хотите, и возвращает отформатированную строку JSON.

некоторые примеры скриптов, которые производят tinyurls по телефону tinyurl.com API-х:

Любой желающий может принять этот код и разместить его на себя, чтобы позволить веб-страниц, чтобы получить доступ к службе Tinyurl. Тот же подход работает для любой службы, недоступной через JSONP.

Смежные вопросы