2013-03-20 91 views
0

我有一個外部JavaScript文件,該文件是一個Ajax的功能: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頁面是:

web服務.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次,然後單擊按鈕,然後onload停止並onclick運行。 我想onclick也運行和onload從第四次迭代開始,並應同時顯示警報或1由1。 所以請幫助我。 在此先感謝。

任何替代方法也是受歡迎的。

+1

我們e jQuery的事件處理程序(例如,'。.on()')而不是內聯或'window.onload'。特別是'window.onload',jQuery可以自己移除你的事件。如果你使用jQuery,最好只使用jQuery的處理程序。 – 2013-03-20 07:06:35

回答

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你的努力。但是當我通過在成功函數中包含Data來根據您的更改運行時,它說數據沒有定義,而如果我在外面運行它,就像我告訴它正在運行一樣。 – user2168945 2013-03-20 07:26:59

+0

檢查我的上次更新。 – sdespont 2013-03-20 07:53:06

+0

仍然無法正常工作。我需要調用Data,因爲它在jQuery.ajax的url中定義。所以不能避免它。 – user2168945 2013-03-20 08:56:30