Jquery 在变量中使用函数

Jquery 在变量中使用函数,jquery,Jquery,我已经设置并测试了一个全局函数,以确保它正常工作: function shortenUrl(url) { ... } 然后我尝试在另一个函数的变量中调用该函数,如下所示: var pageLink = $(location).attr('href'), shortLink = shortenUrl(pageLink); 因此,当我尝试运行此程序时,会出现一个未定义的错误。但是,如果我将pageLink变量从使用jQuery查找页面url更改为硬编码,如“http://exam

我已经设置并测试了一个全局函数,以确保它正常工作:

function shortenUrl(url) { 
   ...
}
然后我尝试在另一个函数的变量中调用该函数,如下所示:

var pageLink = $(location).attr('href'),
    shortLink = shortenUrl(pageLink);
因此,当我尝试运行此程序时,会出现一个未定义的错误。但是,如果我将pageLink变量从使用jQuery查找页面url更改为硬编码,如“http://example.com“和console.log全局函数中的值,我将得到一个返回的值

我只是这样评论回电:

//return shortUrl;
console.log(shortUrl);
function shortenUrl(url) {
   var shortUrl = url; // for the sake of simplicity
   return shortUrl;
}
some();
    function shortenUrl(url) {

        var url = url,
            username = 'bit.ly username',
            key = 'api Key';

        return $.ajax({
            url: 'http://api.bit.ly/v3/shorten',
            data: {
                longUrl: url,
                apiKey: key,
                login: username
            },
            dataType: 'jsonp'
        });
    }

    function modifyDom(v) {
        var shortUrl = v.data.url,
            link = $('<a href="' + shortenLink '">Shorten Link</a>');
        link.prependTo('element');
    }    

    $( function() {
        var pageLink = $(location).attr('href');
        shortenUrl(pageLink)
            .done( modifyDom },
    }​ );
这给了我控制台中的正确值。但它不会返回到我的shortLink变量,因为它仍然显示为未定义。我是不是错过了一些简单的东西?为什么值没有返回到shortLink变量,为什么用jQuery动态创建的链接会通过函数

更新编辑:

好的,重新设置一下。我认为问题在于shortenUrl函数,或者我如何将值传递给它。为了测试功能,我做了以下操作:

    function shortenUrl(url) {

        var url = url,
            username = 'username',
            key = 'api key';

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

var shorten = shortenUrl('http://google.com');
console.log(shorten);
log(shorten)返回未定义的。但是,如果我取消对console.log(shortUrl)的注释;并注释掉返回的短URL;在函数中,我从bit.ly返回一个正确缩短的URL


为什么我不能从console.log(shorten)返回正确的缩短url?变量传递错误吗?

您的
shortenUrl
函数中应该有一个返回url,它返回您的缩短url,如下所示:

//return shortUrl;
console.log(shortUrl);
function shortenUrl(url) {
   var shortUrl = url; // for the sake of simplicity
   return shortUrl;
}
some();
    function shortenUrl(url) {

        var url = url,
            username = 'bit.ly username',
            key = 'api Key';

        return $.ajax({
            url: 'http://api.bit.ly/v3/shorten',
            data: {
                longUrl: url,
                apiKey: key,
                login: username
            },
            dataType: 'jsonp'
        });
    }

    function modifyDom(v) {
        var shortUrl = v.data.url,
            link = $('<a href="' + shortenLink '">Shorten Link</a>');
        link.prependTo('element');
    }    

    $( function() {
        var pageLink = $(location).attr('href');
        shortenUrl(pageLink)
            .done( modifyDom },
    }​ );
我很好奇我的小费是否合适,请让我们都知道

更新

$(window).load(function(){
function shortenUrl(url) {

    var url = url,
        username = 'bit.ly username',
        key = 'api Key';

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

function some() {
    var pageLink = $(location).attr('href'),
        shortenLink = shortenUrl(pageLink);

    var link = $('<a href="' + shortenLink + '">Shorten Link</a>');
    link.prependTo('element');
}
});

并始终关注浏览器控制台中的错误/警告

老实说,我对
jsonp
没有太多经验,但是ajax调用应该会返回。如果
shortenUrl
函数返回了该承诺,那么在调用者中,您可以像这样使用
done

//return shortUrl;
console.log(shortUrl);
function shortenUrl(url) {
   var shortUrl = url; // for the sake of simplicity
   return shortUrl;
}
some();
    function shortenUrl(url) {

        var url = url,
            username = 'bit.ly username',
            key = 'api Key';

        return $.ajax({
            url: 'http://api.bit.ly/v3/shorten',
            data: {
                longUrl: url,
                apiKey: key,
                login: username
            },
            dataType: 'jsonp'
        });
    }

    function modifyDom(v) {
        var shortUrl = v.data.url,
            link = $('<a href="' + shortenLink '">Shorten Link</a>');
        link.prependTo('element');
    }    

    $( function() {
        var pageLink = $(location).attr('href');
        shortenUrl(pageLink)
            .done( modifyDom },
    }​ );
函数shortenUrl(url){
var url=url,
用户名='bit.ly username',
key='api key';
返回$.ajax({
网址:'http://api.bit.ly/v3/shorten',
数据:{
longUrl:url,
阿皮奇:关键,
登录:用户名
},
数据类型:“jsonp”
});
}
函数修改(v){
var shortUrl=v.data.url,
链接=$('');
link.prependTo('element');
}    
$(函数(){
var pageLink=$(位置).attr('href');
shortenUrl(页面链接)
.done(modifyDom},
}​ );

虽然这段代码没有经过测试,但我希望您能理解。

它不应该是
console.log(shortLink);
?您正在运行初始化(
pageLink=…
)在document.ready上?您可以发布shortenUrl代码吗?我想您可能不会返回值或类似的内容。您的代码是否在DOM ready上运行?可能是存在竞争条件和$(位置)还没有定义,因为DOM还没有加载,所以shortenUrl没有收到发送给它的值。没有修复它这里是代码运行的基本概念的一部分,它包括完整的shortenUrl函数。很抱歉,忘了将其公开尝试一下这个-我编辑了我的答案,稍微更正了你的代码-你有两件事要做e:首先,函数声明中缺少plus,第二个缺少函数名。当然,你是,你从shortener服务得到的jsonp响应有http 500错误,因为你发送了错误的api键和用户名,而你的shortenUrl永远不会进入ajax响应的成功部分。正如我在更新的帖子和它应该可以工作。你不能像那样从异步ajax“成功”处理程序返回值。这毫无意义,因此根本不起作用。