Javascript - 在函数定义变量中使用

时间:2013-01-23 12:14:49

标签: javascript jquery

我想执行此函数并使用函数外部的变量,但在每个函数内部。我怎样才能让它发挥作用?

$('.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;
            }
        });
    }

2 个答案:

答案 0 :(得分: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的{​​{1}},我已将success处理程序附加到done范围内,以便您的回调可以访问所有来自.each范围的变量。

但是,如果.each始终是相同的元素,那么通过将$(element)置于成功处理程序中,您可以使用@ JohnJohnGa的答案。

由于问题的性质,我假设您要在append内替换锚点href,因此您需要存储对.each内部链接的引用并使用该链接在回调中引用。

答案 1 :(得分: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);
        }
    });
}