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