2011-05-07 110 views
4

有人請幫助我這個jQuery bit.ly URL縮短。代碼如下:請幫助jQuery的URL bit.ly縮短

function shortenUrl(urlMatch) 
{ 
    var urlMatch = urlMatch 
    var username="myusername"; 
    var key = 'R_897b82b73568ea74fffbafa5a7b846d'; 
    $.ajax({ 
     url:"http://api.bit.ly/v3/shorten", 
     data:{longUrl:urlMatch,apiKey:key,login:username}, 
     dataType:"jsonp", 
     success:function(v) 
     { 
      var shortUrl=v.data.url; 
      return shortUrl; 
     } 
    }); 
} 

$('button').click(function(){ 
    var urlMatch = $(this).val(); 
    var newUrl = shortenUrl(urlMatch); 
    $('#menu').html(newUrl); 
}); 

,每當我運行該腳本,它返回此代碼在控制檯:

jsonp1304728172115({ data : [ ] , "status_code" : 500, "status_txt": "missing_arg_uri"}) 

能有人幫。

+0

缺少參數「format」:「json」?這裏是我的代碼版本: http://stackoverflow.com/questions/1771397/jquery-on-the-fly-url-shortener/7005673#7005673 – 2011-08-10 04:48:21

回答

2

data:{longUrl:urlMatch,apiKey:key,login:username},

如果任何類似json的,那麼你的數據參數不正確形成JSONP:

data:"{'longUrl':" + urlMatch + ",'apiKey':" + key + ",'login':" + username + "}",

上面的代碼沒有進行測試,但它應該是相似的。

+0

尼克,jquery負責翻譯 – ariel 2011-05-07 02:01:36

+0

啊是的,我認爲你是正確的,因爲jsonp調用是GET。你發佈的代碼不起作用,但是我通過將所有變量包含在實際url中來實現它。 – mcbeav 2011-05-07 02:06:15

+0

啊,沒有意識到它是一個GET。很高興知道。 – 2011-05-07 14:52:28

1

這個:urlMatch = $(this).val();會得到按鈕文字到urlMatch中,這是你想要的嗎?

此外,回調中的return不會達到該功能,因爲ajax()是異步功能。要使其同步,請將async:false添加到ajax()參數中。

return將無法​​正常工作,因此您必須將結果分配給全局變量。

但最好的辦法是用$('#menu').html(shortUrl);代替return shortUrl;,因爲這是你正在尋找的結果。而你並不需要async:false,這會阻止你的代碼並暫時鎖定瀏覽器。

如果全部失敗,請嘗試在查詢字符串本身上傳遞參數。您可能需要take a look at this

+0

以及我遇到的實際問題是有一個錯誤消息返回,我無法弄清楚爲什麼。 – mcbeav 2011-05-07 01:24:12

+0

請檢查正在傳遞的urlMatch的內容作爲參數 – ariel 2011-05-07 01:33:57

+0

@mcbeav>我只是檢查了文檔,'async:false'不能用於jsonp,所以你必須去第二個選項。 – ariel 2011-05-07 02:02:18

0

「var urlMatch = urlMatch」後面缺少分號