我打算打电话给一个ajax功能,正在浏览api。我很好奇是否有一个函数可以在等待成功,错误,完成等被调用时执行。
我希望有类似的东西:
$。AJAX({ ... waiting:function(){ //执行一些代码 } });
如果它已经存在,它确实应该。在调用ajax函数之前,我不必在携带那些东西时聪明......
等待可以很容易地执行诸如显示加载gif之类的东西。
那里有什么可以做这种功能吗?我似乎无法找到它。
答案 0 :(得分:3)
在$.ajax
通话后您拥有的任何代码实际上会在通话开始后立即开始运行。如果你有这样的东西:
$ajax('someurl').done(function() { /*** success function ***/ });
someOtherFunctionCall();
无论呼叫成功/失败, someOtherFunctoinCall()
实际上会在ajax呼叫开始后立即执行。
答案 1 :(得分:3)
试试这个
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
}
});
答案 2 :(得分:2)
您应该在启动请求的同时显示加载GIF。除了readyState
之外,没有真正的方法可以知道AJAX调用的实际进度,这就是onreadystatechange
的用途(在简单的JS中,我不知道/关心它在jQuery中的等价物)是)。
答案 3 :(得分:2)
在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。
答案 4 :(得分:1)
最好的方法是使用aSeax请求的beforeSend和complete函数。
$.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
}
});
发送ajax请求后立即点击beforeSend函数。 完成功能在超出成功功能时触发。 因此,您可以在请求完成时通知用户..