我想执行此函数并使用函数外部的变量,但在每个函数内部。我怎样才能让它发挥作用?
$('.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;
}
});
}
答案 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);
}
});
}