2015-04-02 113 views
-1
1 var abc; 
2 <script> 
3 function fn() 
4 { 

5  abc = dataResponse.getValue("list"); 

6  } 

7 document.getElementById("id1").innerHtml=abc; 

这里列表包含HTML代码执行Java代码后收到的,现在我希望把div标签里面的价值,但因为JavaScript的执行是异步的我得到ABC值undefined和线7号分配。我需要完成fn()的执行,然后值应该被分配到第7行。两者都应该在页面加载时完成。它应该适用于我在while循环中使用的所有浏览器: - while(i < 10) {JavaScript函数同步执行

i++; 
if(abc) 
{ 
    document.getElementById("para").innerHTML=abc; 
    break; 
}else{ 
    fn(); 
    } 

,它的工作s的Mozilla和IE浏览器,但不是铬,这也不是好的做法。如何解决这个问题?

这是我从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

如果'FN()'是异步,你为什么不设置它里面的元素的HTML? – DontVoteMeDown 2015-04-02 11:13:54

+0

我试着设置它,但它仍然得到指派,然后取得的java代码完成 – kumar91 2015-04-02 11:16:12

+0

也我使用某些CSS文件的那部分不工作,如果我把该代码放入fn()或任何其他功能 – kumar91 2015-04-02 11:18:34

回答

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); 
}) 
+0

我会重复我问到OP的问题:为什么不把html设置为*'fn()'里面的元素*?有什么我失踪? – DontVoteMeDown 2015-04-02 11:19:26

+0

当您主张jQuery时,为什么使用'document.getElementById(“id1”)。innerHtml = abc;''应该使用'$('#id1')。html('abc');' – click2install 2015-04-02 11:22:51

+0

是的,这使得很多感觉:)我猜可能是dataResponse.getValue(“列表”)是异步的,因为OP提到它像获取数据来自java代码;) – mohamedrias 2015-04-02 11:24:56