ajax转换为同步,如何将同步ajax转换为异步?

我试图检查服务器时间,它与预先设置的截止时间,以防止用户点击过期出售的物品比较(并显示该项目已过期),但我打如何实现这一点,当它与同步呼叫混合时

我知道async:false是一个非常糟糕的主意,它不会在Firefox中工作(适用于Chrome和IE),但它确实如我所愿。我很难搞清楚如何将我的代码转换为异步。如果我将部分代码更改为异步,那么依赖于代码的所有其他代码部分都会崩溃,因为时序已关闭。

前面的代码 - 所有如果sale_closed我会叫()

@get_server_time: (url) ->

$.ajax(

url: url + '/servertime'

type: 'GET'

async: false

)

@sale_closed:() ->

if not @is_valid_user

return true

if Config.override_bid_closed?

return false

if @get_server_time(url) > sale_end

return true

return false

我试图这样做,但是,这不是在工作

CoffeeScript的

@get_server_time: (url) ->

$.ajax(

url: url + '/servertime'

type: 'GET'

)

@sale_closed:() ->

@get_server_time(url).done (data) ->

if not @is_valid_user

return true

if Config.override_bid_closed?

return false

if data > sale_end

return true

return false

相同的代码

的Javascript:

function get_server_time (url) {

return $.ajax({

url: url + '/servertime',

type: 'GET'

});

};

function sale_closed() {

get_server_time(url).done(function(data) {

if (!this.is_valid_user()) {

return true;

}

if (Config.override_sale_closed != null) {

return false;

}

if (data > sale_end) {

return true;

}

return false;

});

};

这是正确的吗?

是期望从

foo:() ->

if sale_closed()

/* do something */

改变我的所有sale_close代码

do_something:() ->

/* do something */

foo:() - >

sale_closed(do_something)

这是一个巨大的噩梦,因为我不得不改变了很多代码,并会令他们所有的异步其中可能会打破所有其他调用'foo','foo2'等的函数(之前是同步的)。

是否有任何东西保证变量do_something读取将在上下文中,并执行时具有相同的值?

感谢您的帮助,我试图总结我的头周围此

+1

如果你想要异步代码,那么你需要有回调,当ajax调用完成/返回时可以触发。这些回调是你如何将各个阶段联系在一起的。 a)发送数据到服务器b)主代码到达其他地方c)当ajax调用返回时,回调触发并开始做任何事情 –

+0

展开'@ sale_closed'看起来更像'@sale_closed :(回调) - > .. .'并且在'@ sale_closed'里面说'callback(whatever)'而不是'return whatever'。然后把'sale_closed'主叫从里面翻出来。 –

+0

这不是我想要的异步代码,它是Firefox不支持async:false,因为他们严格执行CORS(基于我在bugzilla和这里阅读的内容),这意味着我必须重写我的代码才能工作与异步。 你是两个说我在**中描述的是这是正确的**部分?我只是想确定我理解它是正确的,因为这意味着我将所有当前的代码放在一个接受'(任何)'的函数中,而不是仅仅改变'@ sale_closed'函数的东西,我有'if @ saled_closed'要改变所有调用它的代码 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值