Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回未定义的位函数_Javascript_Jquery - Fatal编程技术网

Javascript 返回未定义的位函数

Javascript 返回未定义的位函数,javascript,jquery,Javascript,Jquery,我有一个基本函数,试图从bit.ly返回一个缩短的url。我的用户名和api_密钥刚刚被删除,但它们已经过测试,我得到了正确的回复。我们还进行了检查,得到了一个包含正确数据的JSON响应 我遇到的问题是,我希望这个函数能够在网站上的不同位置调用,以缩短将包含在推文中的链接。因此,我们的想法是编写一个函数,我们可以及时调用它,因为我们明确知道有什么东西将从tweet发送,需要动态调用页面的url 当url被传递给函数时,返回值就没有定义。以下是功能: var UrltoShorten =

我有一个基本函数,试图从bit.ly返回一个缩短的url。我的用户名和api_密钥刚刚被删除,但它们已经过测试,我得到了正确的回复。我们还进行了检查,得到了一个包含正确数据的JSON响应

我遇到的问题是,我希望这个函数能够在网站上的不同位置调用,以缩短将包含在推文中的链接。因此,我们的想法是编写一个函数,我们可以及时调用它,因为我们明确知道有什么东西将从tweet发送,需要动态调用页面的url

当url被传递给函数时,返回值就没有定义。以下是功能:

    var UrltoShorten = 'http://google.com',
        bitly = shortenUrl(UrltoShorten);

    function shortenUrl(longUrl) {

        var username = 'removed',
            key = 'removed';

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

console.log(bitly); // Returns undefined 
在我们的测试中,我们发现console.logging函数中的值每次都返回缩短的URL。Console.logging shortenUrl函数之外的值每次都返回未定义


有什么原因我们不能从函数中获取正确的值吗?

ajax调用是异步的,这意味着程序不会像您预期的那样逐行运行。ajax调用之外的javascript将继续运行,当ajax调用在后台完成时,控件将跳回成功/错误回调

简短回答:您想要对来自ajax调用的数据执行的任何操作都必须在该调用的成功处理程序中


如果出于某种原因,您希望在ajax调用完成之前停止所有操作,那么将选项
async:false
传递给ajax。这将冻结浏览器,直到ajax调用完成。

使用以下命令设置ajax synchron:

 $.ajax({
    async:false,
    ...
})

您最终将在函数外部获得正确的值,但只有在HTTP请求完成并且调用了“success”函数之后。仅用于测试,我将async:false设置为未定义,它仍然返回为未定义。