在所有其他AJAX调用之前发送AJAX调用
Sending an AJAX call before all other AJAX calls
在我的web应用程序上发送其他AJAX调用之前,我需要检查条件并运行AJAX调用。
我想把这个AJAX调用放在ajaxSetup上的beforeSend中,使用async:false(以防止我的初始调用在这个调用完成之前运行)。
类似这样的东西:
//I set an event that fires:
$.ajax({
type: "GET",
url: my_url,
beforeSend: function() {
//do something, like show a spinner loader gif
}
});
//Somehwere in my app I also have:
$.ajaxSetup({
beforeSend: function() {
if(x===1){
$.ajax({
type: "GET",
url: my_url/fetch_something,
async:false
});
}
}
});
我在第一个AJAX调用上的beforeSend会超过ajaxSetup中的那个吗?有没有更好的方法?
我的应用程序更好的想法:
我通过应用程序进行了很多Ajax调用,每个调用都会在头上发送一个安全哈希来验证用户,这些哈希也有时间限制(哈希和时间限制都保存在localStorage中)
我想从ajax设置(以及其中的条件)中检查时间限制——如果time_limit<current_time,然后运行ajax调用来刷新用户散列。
这不是一个针对1或2个调用的练习,我的应用程序上确实有20多个正在增长的Ajax调用,这些调用利用了用户哈希,对其中的每一个进行检查是非常不切实际的。
更新:
在设置"会话"/本地存储的间隔上有一种方法
var refreshing = false;
var intervalID;
$(document).ready(function(e){
var delay = 1234;
intervalID = window.setInterval(setupInterval, delay);
});
function setupInterval(){
refreshing = true;
$.ajax(URL).done(function(r) { //do stuff
setupStorage(r);
refreshing = false;
});
}
function setupStorage(info){
//setup whatever here
}
旧:
你能在准备函数中使用一些逻辑来选择你需要做的事情吗?
因此,基本上调用一个ajax调用->如果为false,只需调度后一个方法,否则运行setup一个,并在完成时调度后一种方法。
一些伪代码:
var refresh = false;
$(document).ready(function(e){
$.ajax(URL).done( function(r) {
if(r) {
routeOne();
} else {
latter();
}
});
});
function routeOne(){
$.ajax(URL).done(function(r) { //do stuff
latter();
});
}
function latter(){
//All other ajax calls
}
我会多花点心思让我先喝完咖啡。。。
编辑:
根据您更新的描述,您是否可以安排setInterval在您需要的时间间隔上运行检查方法/哈希更新,服务器上的时间间隔是静态的还是可变的?Facebook通过心跳来实现这一点,我在网络应用程序中使用了这种逻辑和一些"锁定"功能。如果您正确地安排了间隔,它就不会中断任何其他ajax调用。
在传入给定的查询选项之前,尝试覆盖$.ajax以进行"预调用":
var oldAjax = $.ajax;
$.ajax = function() {
var args = arguments;
oldAjax({
type: "GET",
url: "/echo/html/",
success: function(result){
// do something here to check result
// if result is good, do the request:
return oldAjax.apply($, args);
// if its bad, handle the error
}
});
}
下面是一把小提琴:http://jsfiddle.net/NF76U/
我建议使用.done()
($.Deferred
object
)
function AjaxCall() {
return //code of your ajax without async:false
}
function anotherAjaxCall{
return //code of you ajax call
}
AjaxCall.done(anotherAjaxCall);
避免使用async:false
这是一种不推荐使用的做法,它会阻塞浏览器
- 阻止在select2单击时调用ajax
- 调用Ajax并返回响应
- Ajax:只在元素存在的情况下调用Ajax
- PHP,MySQL,AJAX-调用AJAX结果后,Bootstrap CSS样式不会显示
- 调用Ajax内部的函数
- 无法获取属性'的值;拆分'在IE8中调用ajax之后
- 我们如何在Firefox中调用AJAX
- Rails:通过调用Ajax重定向
- Cookie 在 Spotify (Javascript) 中调用 ajax 后未保存
- 通过调用 Ajax 来设置 struts bean 值
- 无法从服务器中的 php 调用 Ajax 函数
- 如何在附加表行时调用 ajax
- 在facebook用户发送邀请请求后调用ajax调用
- 定期调用Ajax
- 调用Ajax生成的表单的值
- 无法调用ajax函数
- 在调用AJAX之后显示ng控制器的内容;作为“;作用
- CSS,Java脚本在php中调用ajax后无法正常工作
- 成功调用AJAX后,Toast Growl不会出现
- 如何在调用AJAX时记录或捕获信息和错误