1 var abc;
2 <script>
3 function fn()
4 {
5 abc = dataResponse.getValue("list");
6 }
7 document.getElementById("id1").innerHtml=abc;
这里列表包含执行java代码后收到的html代码现在我想将值放在div标签内,但由于执行javascript是异步的,我得到abc值undefined并在第7行分配。我需要完成fn()的执行那么值应该被分配到第7行。并且两者都应该在页面加载时完成。它应该适用于我使用while循环完成的所有浏览器: - 而(I&LT; 10) {
i++;
if(abc)
{
document.getElementById("para").innerHTML=abc;
break;
}else{
fn();
}
它适用于mozilla和IE但不适用于chrome,这也不是很好的做法。如何解决这个问题?
这是我从java
收到的代码<ul class="hello" id="hello" >
<li><a href="#">India</a>
<ul >
<li ><a href="#"> States</a></li>
<li><a href="#">WB</a>
<ul >
<li ><a href="#">Kolkata</a></li>
<li><a href="#">Silliguri</a></li>
<li><a href="#">Kolkata</a>
<ul>
<li><a href="#">Park Street</a>
<ul>
<li><a href="#">BMW Showroom</a></li>
<li><a href="#">City center</a>
<ul>
<li><a href="#">KFC</a></li>
<li><a href="#">pizzaHut</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
答案 0 :(得分:0)
由于您的dataResponse.getValue
函数是异步的,因此您需要转换fn
函数,以便在值解析后返回承诺。
function fn()
{
var defer = $.Deferred();
abc = dataResponse.getValue("list");
var timer = setInterval(function() {
if(abc) {
clearInterval(timer);
defer.resolve(abc);
}
}, 100);
return defer.promise();
}
现在,
fn().then(function(abc) {
$("#id1").html(abc);
})
答案 1 :(得分:0)
正在运行的JSBin在这里使用带有Deferred
的jQuery timeout
对象来模拟异步调用。