0

この関数を実行し、変数を関数の外で使用したいのですが、各関数内で使用します。どうすればこれを機能させることができますか?

$('.social').each(function() {
    url = "http:www.google.com";
    bit_url(url);    
    $(element).append(urlshortened);
});

function bit_url(url) {
        var url = url;
        var username = "...";
        // bit.ly username
        var key = "...";
        $.ajax({
            url : "http://api.bit.ly/v3/shorten",
            data : {
                longUrl : url,
                apiKey : key,
                login : username
            },
            dataType : "jsonp",
            success : function(v) {
                urlshortened = v.data.url;
            }
        });
    }
4

2 に答える 2

0

Ajax の「A」は、非同期コードがそのようには機能しないことを表し、コールバックが必要です。

function bit_url(url) {
   [...]
   //return the Deffered object
   return $.ajax({ [...]
}

$('.social').each(function() {
    [...]
    //attach a `done` callback to the returned $.ajax's Deferred instance
    bit_url(url).done(function(v) {
        $(element).append(v.data.url);
    });
});

Deferred.done$.ajaxはsと同等です。コールバックがスコープからすべての変数にアクセスできるように、スコープ内にハンドラーsuccessをアタッチしました。done.each.each

ただし、 が常に同じ要素である場合は、成功ハンドラー内に$(element)配置することで、@JohnJohnGa の回答で問題ありません。append

質問の性質上、href内部のアンカーを置き換えたいと思うので、リンクへの参照を内部に保存し、その参照をコールバック内で使用します。.each.each

于 2013-01-23T12:20:20.283 に答える
0

success関数に結果を追加できます

success: function (v) {
    urlshortened = v.data.url;
    $(element).append(urlshortened)
}

したがって、コードは次のようになります。

$('.social').each(function () {
    url = "http:www.google.com";
    bit_url(url);
});

function bit_url(url) {
    var url = url;
    var username = "...";
    // bit.ly username
    var key = "...";
    $.ajax({
        url: "http://api.bit.ly/v3/shorten",
        data: {
            longUrl: url,
            apiKey: key,
            login: username
        },
        dataType: "jsonp",
        success: function (v) {
            $(element).append(v.data.url);
        }
    });
}
于 2013-01-23T12:22:38.423 に答える