4

この jQuery bit.ly URL 短縮機能について誰か助けてくれませんか?

コードは次のとおりです。

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"})
4

3 に答える 3

2

あなたが持っている

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

jsonp が json のようなものである場合、データ引数は正しく形成されていません:

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

上記のコードはテストされていませんが、似ているはずです。

于 2011-05-07T01:41:27.267 に答える
1

これ:urlMatch = $(this).val();ボタンのテキストを urlMatch に取得します。これでよろしいですか?

また、非同期関数returnであるため、コールバックの は関数に到達しません。ajax()同期するには、パラメーターに追加async:falseajax()ます。

returnうまくいかないので、結果をグローバル変数に割り当てる必要があります。

しかし、それがあなたが探している結果であるためreturn shortUrl;、最良の方法は に置き換えることです。コードがブロックされ、ブラウザーが一時的にロックされるため、その$('#menu').html(shortUrl);必要はありません。async:false

すべてが失敗した場合は、クエリ文字列自体にパラメーターを渡してみてください。これを見てみたいと思うかもしれません。

于 2011-05-07T00:40:05.630 に答える