2015-04-02 6 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 Теперь я хочу, чтобы поместить значение внутри сНа тега, но так как выполнение JavaScript является асинхронным я получаю значение а неопределенным и назначено на линии нет 7 . Мне нужно выполнить выполнение fn(), тогда значение должно быть назначено на номер строки 7. И оба должны выполняться на загрузке страницы. И он должен работать для всего браузера, который я сделал с использованием цикла while: - while (i < 10) {функции JavaScript синхронного выполнение

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

и работа s для mozilla и IE, но не для хрома, а также это не очень хорошая практика. Как решить эту проблему?

Это код, который я получаю от Явы

<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

Если 'п()' является асинхронной, почему бы вам не установить HTML элемента внутри него? – DontVoteMeDown

+0

Я попытался установить его, но все же он получил назначение сначала, тогда выборка кода Java завершена – kumar91

+0

также я использую определенные файлы css для этой части div, которая не работает, если я помещаю этот код внутри fn() или любую другую функцию – kumar91

ответ

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

+0

Зачем использовать 'document.getElementById (« id1 »). InnerHtml = abc;' когда вы защищаете jQuery. Должен использовать '$ ('# id1'). Html ('abc');' – click2install

+0

Да, это имеет смысл :) Я думаю, может быть dataResponse.getValue ("list") является асинхронным, как указано в OP, так как он получает данные из java-кода;) – mohamedrias

Смежные вопросы