2013-03-20 3 views
0

У меня есть функция Ajax во внешнем файла JavaScript, который:Вызов Ajax функции OnLoad и OnClick одновременно

ajax.js

function webservice(x){ 

    jQuery.ajax 
      ({ 
       //some code here 
      }); 

    Data = function(data){ 
        if(x==1) 
          { 
           for(i=0;i<10;i++) 
           { 
            webservice(i); 
           alert"Onload"); 
           } 
          } 
          else 
          if(x==5) 
          { 
           for(i=0;i<10;i++) 
           { 
           webservice(i); 
           alert ("Onclick"); 
           } 
          } 

     } 

У меня есть другой HTML-страницу, которая:

вебсервис .html

<html> 
<title>Call web service</title> 
<head> 
<script type="text/Javascript" src="jquery-1.9.1.js"></script> 
<script type = "text/javascript" src="ajax.js"></script> 
<script> 

window.onload=function() 
{ 
    webservice(1)('onload'); //call 1 

} 

</script> 
</head> 

    <body> 


    <input id="webservice" type = "button" name = "webservice" value = "Call Webservice"  
    onclick="webservice(5)"/> 


    </body> 
    </html> 

Поэтому я хочу вызвать ту же функцию в onLoad и onclick кнопки, чтобы t оба вызова будут выполняться одновременно. Но когда onload запускается, например, 3 раза, и я нажимаю кнопку, тогда нагрузка останавливается и запускается onclick. Я хочу, чтобы onclick также запускался и загружался, чтобы начать с 4-й итерации, и оба должны отображать предупреждение одновременно или 1 на 1. Так что, пожалуйста, помогите мне. Спасибо заранее.

Любые альтернативные методы также приветствуются.

+1

нас e jQuery (например, '$ .on()') вместо встроенного или 'window.onload'. Особенно 'window.onload', jQuery может удалить ваше событие самостоятельно. Если вы используете jQuery, лучше всего использовать обработчики jQuery. –

ответ

0

Потому что $.ajax является асинхронной функцией. В вашей текущей версии ваш код называется потенциально до конца вызова AJAX. Поэтому у вас есть странное поведение.

Чтобы исправить это, ваш код должен быть перемещен в обратный вызов, как это:

function webservice(x) { 
    var inputParam = x; 
    jQuery.ajax({ 
     url: 'test.php', 
     data: {}, 
     success: function (data) { 
      if (inputParam == 1) { 
       for (i = 0; i < 10; i++) { 
        webservice(i); 
        alert("Onload"); 
       } 
      } else if (inputParam == 5) { 
       for (i = 0; i < 10; i++) { 
        webservice(i); 
        alert("Onclick"); 
       } 
      } 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      alert('an error occurred!'); 
     } 
    }); 
} 

Кроме того, во избежание инлайн JS.

Заменить

window.onload=function() 
{ 
    webservice(1)('onload'); //call 1 
} 

По

$(document).ready(function(){ 
    webservice(1);//call 1 
}); 

И

<input id="webservice" type = "button" name = "webservice" value = "Call Webservice"  
    onclick="webservice(5)"/> 

По

$('#webservice').click(function(){ 
    webservice(5); 
}); 
+0

Спасибо, sdespont за ваши усилия. Но когда я запускаю в соответствии с вашими изменениями, включив функцию «Данные в успех», это означает, что данные не определены, а если я запустил его, как я сказал, он работает. – user2168945

+0

Проверьте последнее обновление. – sdespont

+0

Все еще не работает. Мне нужно вызвать Data, как определено в URL-адресе jQuery.ajax. Так что не может этого избежать. – user2168945

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