ope*_*sas 2 javascript ajax jquery asynchronous
我正在使用基于select2 jQuery的替换组合框,我必须定义一个回调来处理从json rest Web服务收到的数据.
问题是,在同一个回调中,我必须发出另一个GET请求来获取匹配记录的总数,以便select2可以决定是否必须加载更多结果(它具有无限滚动功能)
代码是这样的:
$("#country").select2({
ajax: { // instead of writing the function to execute the request we use Select2's convenient helper
url: 'http://localhost:9000/api/countries',
dataType: 'json',
data: function(term, page) {
return {
filter: term,
page: page,
len: 10
};
},
results: function(data, page) {
return {
results: data, more: ????
};
}
}
});
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何发出异步请求(我发出跨域请求,并且文档说在这种情况下不支持async)并等待它返回结果回调之前完成.
select2页面的示例如下:
results: function (data, page) {
var more = (page * 10) < data.total; // whether or not there are more results available
// notice we return the value of more so Select2 knows if more results can be loaded
return {results: data.movies, more: more};
}
Run Code Online (Sandbox Code Playgroud)
问题是我的Web服务返回来自不同端点的记录总数,所以我必须发出另一个请求,如下所示:http:// localhost:9000/api/countries?filter = term
任何的想法?
你不能等待javascript中的异步回调.您必须重新构建代码,以根据实际回调的异步响应执行所有未来的工作.
如果你需要进行多个连续的ajax调用,那么你发出第一个ajax调用,在第一个ajax调用的成功处理程序或响应处理程序中,你发出第二个ajax调用,在第二个调用处理器中,你执行任何调用你想要做的数据.
如果看到你正在使用.select2()
框架.在框架中,结果回调是ajax调用返回的位置.在那个函数中,您将使用普通的jQuery ajax调用发出第二个ajax调用,并且在第二个ajax调用的成功处理程序中,您将执行您尝试处理的最终数据.您将无法使用结果回调的正常返回值,因为在您需要返回时您将无法获得最终数据.我认为这只是一个限制.select2()
,因为它只支持单个ajax调用.它只是意味着你不能使用一点内置行为,并且必须自己使用你自己的代码来应用结果,但这并不意味着你必须抛弃.select2()
你使用它的其他一切.
看起来你可能只想change
直接挂钩事件而不是使用他们内置的ajax东西,因为如果你需要两个序列化的ajax调用它看起来并不像它真的提供了很多东西.
归档时间: |
|
查看次数: |
8535 次 |
最近记录: |