因为 getJSON 方法是异步的。发生了什么...
getInviteLink : function() { // this function is called...
var me = this,
invite_url; // happens right away
$.getJSON('get_invite_code.json', function(data) {
// Step 2, these statements don't happen until later
// -- when the response is received
console.log(data.invite_url); // this
invite_url = data.invite_url;
}); // Step 1. the getJSON is called right away
console.log(invite_url) // this happens right after the
// the getJSON is called, but before
// it gets a response. Thus no data when the log
// statement is invoked
return invite_url; // also no data (yet) when this return statement
// is executed
},
添加invite_url
要修复您的软件,您需要意识到在从服务器接收到 JSON 响应之前,您无法对 执行任何操作。-- 如果您的客户端最终出现网络问题或服务器问题,它可能永远不会收到。
您可以将一个函数传递给您的 getJSON 调用。该函数将使用邀请 URL。与此同时,您可以为您的客户做其他事情。
如果在您收到响应之前您的软件无事可做,则设置一个忙碌指示符(旋转圆圈或其他东西),然后启动 json 请求并让函数在您收到响应时取消忙碌指示符。
有关此的更多信息,请参阅 jQuery json 文档。