2015-04-02 169 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