exports._returnBankCardInfo = function() { // 返回登录状态
var result
$.ajax({
url: '/user/loginStatus?timestamp='+(new Date()).valueOf(),
type: 'get',
cache: false,
})
.done(function(result) {
return result
})
}
exports.showBankCardInfo = function() { // 使用通用接口返回的信息
console.log(exports._returnBankCardInfo())
}
说明:
每次都需要查询用户登录状态,所以做成通用方法;showBankCardInfo 直接调用返回信息进行处理,问题是显示为 undefined,是不是我的格式写错了,sea.js 应该能够支持我说的应用。
PHP中文网2017-04-10 16:19:55
首先指出: 这和seajs没有半毛钱关系,是ajax造成的。究其原因,是你ajax的使用方式不正确。
如果你将ajax的async设为false,那这个函数就是对的,但是会很卡。这也是jquery后来弃用此参数的原因。
因此默认情况下,ajax是异步的。也就是说,ajax不会阻塞主线程,调用后立即返回。
这好比: 你是 ajax的调用者,你有一个叫result的购物袋,你要去一个叫ajax的商店买东西。见到售货员,你说: “请给我数据。”
如果售货员微笑着说:“好的请稍等,我这就去给您拿。”转身离开,而你坐在柜台前干等。一段时间后,她回来了,将数据塞入你的购物袋。购物结束。这叫同步,即async为false的情况。
如果售货员微笑着说:“好的。不过这需要一定的时间。等我拿到了货物,会通过回调快递通知您,并送至您的住所。”于是,你可以转身离开回家,去看片打球干嘛都行。一段时间后,“叮咚”,货到了。购物结束。这叫异步。
而你干了什么呢?转身出商店后,你马上把result塞给另一个人,告诉他里面有数据。然而并没有,因为货还没到呢!
解决方法是: 使用 Defered 对象。事实上,ajax 函数返回值就是一个 Defered对象。这是一个类 Promise 的协议对象,主要是为了延迟异步回调的处理,消除回调地狱。
这好比: 你跟那个人说:“我还没收到货呢?这样,你把你要对货干的事告诉我,等我拿到货第一时间帮你干。”
当然,这需要思维上的转变。毕竟这个架构和以往的顺序执行很不一样。
参考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise
http://api.jquery.com/jQuery.ajax/
怪我咯2017-04-10 16:19:55
exports._returnBankCardInfo = function() {
return $.ajax({
url: '/user/loginStatus?timestamp='+(new Date()).valueOf(),
type: 'get',
cache: false,
});
}
exports.showBankCardInfo = function() {
exports._returnBankCardInfo()
.done(function(result){
//这里使用你的result
});
}