当我的ajax调用检索数据时,我有这个加载消息。但我得到了奇怪的结果。消息出现和中途渲染,直到ajax完成或者它完全出现,让用户想知道出了什么问题。我需要加载消息的原因是它大约有5-10秒的延迟,而在检索数据时打开对话框,绘制地图,然后用标签重新绘制地图的要素图层。
这是我的代码:
function loadData(v)
{
var reg = 1;
var vId = v;
var d =
{
regionType: reg,
varId: vId
};
//$("#loading").ajaxStart(function () {
// $(this).show();
//}).ajaxStop(function () {
// $(this).hide();
//});
$("#loading").ajaxStart(function () {
$(this).show();
});
$.ajax({
type: "GET",
url: WebRoot + "ws/bis.asmx/Data",
data: d,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
fipsData = data.d;
openBox(d);
init(regType, varId);
$("#loading").ajaxStop(function () {
$(this).hide();
});
} //ends success function
}); //ends ajax call
}; //ends message
答案 0 :(得分:3)
无需ajaxStart
或ajaxStop
function loadData(v)
{
var reg = 1;
var vId = v;
var $loading = $("#loading");
var d =
{
regionType: reg,
varId: vId
};
// Starts immediately after this line so no need to use ajaxStart
$loading.show();
$.ajax({
type: "GET",
url: WebRoot + "ws/bis.asmx/Data",
data: d,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
fipsData = data.d;
openBox(d);
init(regType, varId);
}, //ends success function
// Fires even if a failure, so loading spinner won't hang around for no reason
done: function() {
$loading.hide();
}
}); //ends ajax call
}; //ends message
答案 1 :(得分:0)
如果您已开始使用ajaxStop
和ajaxStart
,那么您应该将ajaxStop
处理程序移到成功回调之外。
$("#loading").ajaxStart(function () {
$(this).show();
}).ajaxStop(function () {
$(this).hide();
});
$.ajax({
type: "GET",
url: WebRoot + "ws/bis.asmx/Data",
data: d,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
fipsData = data.d;
openBox(d);
init(regType, varId);
} //ends success function
}); //ends ajax call
答案 2 :(得分:0)
问题是“这个”
$.ajaxStart(function () {
$("#loading").show();
});
“this”变量的变化取决于你的函数被调用的方式。
http://devlicio.us/blogs/sergio_pereira/archive/2009/02/09/javascript-5-ways-to-call-a-function.aspx
上面的链接可以是了解更多有关js函数调用的好开始!