2013-03-20 93 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