我试图根据所选择的操作显示<div>
。我在数据库中放了一个列表,用于协调操作和<div>
的类。在测试代码时,它会工作几次,然后随机停止工作。我验证了内容;没关系。在.hide()之后使用.show()时似乎是一个问题或错误。
知道怎么解决吗?
$("#ddlOperation").change(function() {
var idState = $(this).val();
// get the name of all classes and hide it
$.getJSON("/Trademark/hideFirst", function(fiData) {
$.each(fiData, function (index, itemData) {
$('.' + itemData.Text).hide("slow");
});
});
// get the class that must be shown
$.getJSON("/Trademark/LoadFieldByOperation", { id: idState },
function(fData) {
$.each(fData, function (index, itemData) {
$('.' + itemData.Text).show("slow");
// doesn't work always even the itemData.Text contains the suitable string!
});
});
答案 0 :(得分:3)
这两个请求是异步的,因此无法保证隐藏项目的第一个回调在第二个回调之前运行。为确保这一点,您可以执行以下操作:
// get the name of all classes and hide it
$.getJSON("/Trademark/hideFirst", function (fiData) {
$.each(fiData, function (index, itemData) {
$('.' + itemData.Text).hide("slow");
});
// get the class that must be shown
$.getJSON("/Trademark/LoadFieldByOperation", { id: idState }, function (fData) {
$.each(fData, function (index, itemData) {
$('.' + itemData.Text).show("slow");
});
});
});
答案 1 :(得分:1)
您按顺序触发了两个ajax请求。由于它们是异步的,因此无法保证第一个响应将在第二个响应之前到达。由于您从响应回调中调用.show()
和.hide()
,这可能是导致问题的原因。
答案 2 :(得分:0)
我猜第一块代码在您尝试显示内容时仍然有效。尝试删除"slow"
以便更快地获取补间。
答案 3 :(得分:0)
这两个ajax调用同时执行,因此第二个调用可以先完成调用。这意味着当第一次调用结束时,您的div实际上将被隐藏
答案 4 :(得分:0)
$.getJson()
异步工作,因此可能会在隐藏项目的函数之前调用显示项目的函数。
更改订单无关紧要的代码,或者在应用第一个getJson的结果之前不应用第二个getJson的结果。例如,您可以使用变量来跟踪项目是否已被隐藏,如下所示:
var secondResults;
var firstReceived;
// first
$.getJson(..., function(fData) {
// hide stuff
if(secondResults){
//show stuff
}
firstReceived = true;
});
// second
$.getJson(...., function(fData) {
....
if(!firstReceived){
secondResults = fData;
} else {
// show stuff
}
});
或者你可以通过在第一个getJson调用的success函数中调用第二个getJson来同步链接两个getJson调用。