我打算打电话给ajax功能,并正在通过api查看。我很好奇,如果有一个功能可以在等待成功,错误,完成等被调用的时候执行。是否有jquery ajax函数在等待错误,成功或完成时调用?
我希望有这样的:
$阿贾克斯({ ..., 等待:函数(){// 执行一些代码 } });
如果它不在那里,它确实应该。它不是在我的脑海智能不得不随身携带的东西被称为AJAX功能之前...
等待可以很容易地进行一些诸如显示加载GIF或类似的东西。
有没有什么做这种功能?我似乎无法找到它。
我打算打电话给ajax功能,并正在通过api查看。我很好奇,如果有一个功能可以在等待成功,错误,完成等被调用的时候执行。是否有jquery ajax函数在等待错误,成功或完成时调用?
我希望有这样的:
$阿贾克斯({ ..., 等待:函数(){// 执行一些代码 } });
如果它不在那里,它确实应该。它不是在我的脑海智能不得不随身携带的东西被称为AJAX功能之前...
等待可以很容易地进行一些诸如显示加载GIF或类似的东西。
有没有什么做这种功能?我似乎无法找到它。
试试这个
jQuery.ajax({
url:"http://www.example.com/",
beforeSend:function(){
//show loading gif
},
success:function(resp){
//handle response from server
//hide or remove loading gif
},
error:function(msg){
//show error message
}
});
您应该在启动请求的同时显示加载GIF。除了readyState
之外,没有真正的方法可以知道AJAX调用的实际进度,这就是onreadystatechange
的用途(在普通的JS中,我不知道/关心它在jQuery中的等价物是什么)。
beforeSend:创建一个微调器,然后在Done()它会隐藏微调器,或任何函数beforeSend调用? – Fallenreaper
我想你可以这样做,但为什么不把代码添加到ajax函数调用后立即微调? –
因为它不是混在一起,所以有一个想法是它将完成不同的任务。这就是说,把它放在beforeSend有一个关于微调器的ajax调用,而不是一个函数在ajax请求 – Fallenreaper
这很容易,直到Ajax调用完成后显示的好手。下面是它如何工作的一个示例:
loading = {
count: 0
};
loading.finish = function() {
this.count--;
if (this.count==0) this.$div.hide();
};
//
loading.start = function() {
this.count++;
if (!this.$div) {
var html = '<div style="position: fixed;z-index:100;left:0;top:0;right:0;bottom:0;background: black;opacity: 0.6;">';
html += '<table width=100% height=100%>';
html += '<tr><td align=center valign=middle>';
html += '<img src=img/loading.gif>';
html += '</td></tr>';
html += '</table></div>';
this.$div=$(html);
this.$div.prependTo('body');
}
setTimeout(function(){
if (loading.count>0) loading.$div.show();
}, 500);
};
// the function to call
askUrl = function(url, success) {
var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
success(msg);
}
loading.finish();
}
};
loading.start();
httpRequest.open('GET', url);
httpRequest.send();
};
如果调用askUrl和服务器不会在500毫秒回答,屏幕上会显示为灰色,并显示一个微调。
由于这是一个简短的代码,它实际上取决于所期望的结果,我不知道这应该在jQuery的,甚至插件可用。
我得到了我的gif微调here。
,你有你的后电话$.ajax
实际上将开始启动呼叫后立即运行任何代码。所以,如果你有这样的事情:
$ajax('someurl').done(function() { /*** success function ***/ });
someOtherFunctionCall();
someOtherFunctoinCall()
实际上将立即Ajax调用开始后执行,并不管呼叫的成功/失败的发生。
这个缺点之后被解雇,这是因为虽然它在这里看起来不错,但是你不需要看到ajax调用和someOtherFunctionCall();这正是我想要的 – Fallenreaper
最好的办法是使用beforeSend和功能齐全的Ajax请求..
$.ajax({
.. Your ajax settings..
success : function(result){
// do what you want with data here
},
beforeSend : function(){
// Show a ajax gif here
},
complete : function(){
// Hide the ajax gif here
}
});
的beforeSend功能就被作为Ajax请求打发送.. 完整的功能被触发时,它是从成功的功能.. 所以你可以通知用户的,当请求完成..
等待函数和ajax调用之后调用的函数之间会有什么区别? – yoshi
除了yoshi的评论之外,我通常会说我通常会在**调用之前放置这种命令**,所以在等待命令和回调命令之间没有竞争条件。最显而易见的例子是'loading ...'消息显示并隐藏在ajax调用结束时。 – Pandaiolo
是的,所以提供了不同的答案,我认为beforeSend函数是实现它的最好方法。这样,在一个微调器的例子中,你可以在调用之前启动它,然后使用.done()命令将它淡出。 – Fallenreaper