2012-04-07 3 views
-2

Ich arbeite an meiner einfachen Testseite, die voller Formulare war. Wie einer von euch vor ein paar Tagen gepostet hat, benutze ich jetzt jquery, um Ajax zu verwenden und zu vermeiden, die Seite zu aktualisieren, sobald einer der Submit-Button gedrückt wird. Also befolge nur die Vorlage Ich habe hier gefunden: http://jquery.malsup.com/form/jquery ajax form + ajax setTimeout funktioniert nicht

Ich habe hinzugefügt, um meine Webseite dieses Stück Code:

<script> 
    $(document).ready(function() { 
     // bind 'myForm' and provide a simple callback function 
     $('#myForm').ajaxForm(function() { 
      alert("Thank you for your comment!"); 
     }); 
    }); 
</script> 

Was ich erleben ist, dass jetzt die Formen perfekt funktionieren, aber die Ajax-setTimeout-Funktion funktioniert nicht mehr! Wenn ich den vorherigen Code entferne, funktioniert der Ajax setTimeout wieder. Habt ihr einen Hinweis darauf, warum es so ist?

<script type="text/javascript"> 

    function myff(abc) 
    { 

     var 
      $http, 
      $self = arguments.callee; 

     if (window.XMLHttpRequest) { 
      $http = new XMLHttpRequest(); 
     } else if (window.ActiveXObject) { 
      try { 
       $http = new ActiveXObject('Msxml2.XMLHTTP'); 
      } catch(e) { 
       $http = new ActiveXObject('Microsoft.XMLHTTP'); 
      } 
     } 

     if ($http) { 
      $http.onreadystatechange = function() 
      { 
       if (/4|^complete$/.test($http.readyState)) { 
        document.getElementById('ReloadThis3').innerHTML = $http.responseText; 
        setTimeout(function(){$self(abc);}, 1000); 
       } 
      }; 
      $http.open('GET', 'loadfunc.php' + '?abc=' + abc); 
      $http.send(null); 
     } 
    } 

</script> 

neuer Code:

<script> 
     $(document).ready(function() { 


     $('#s1hvform1').ajaxForm(function() { 
     }); 

     sendreq(abc); 
}); 

function sendreq(abc) 
{ 
    $.get('loadfu.php?abc='+abc,function(r) 
    {   
     $('#ReloadThis2').html(r); 
     setTimeout(function(){sendreq(abc);},1000);  }); 
}   

</script> 


<div id="ReloadThis2">Loading data...</div> 
+0

Da weder '$ http' noch '$ self' dies tun, ist es leicht irreführend (obwohl ich denke, dass es nicht genau falsch ist), sie so zu benennen, wie Sie es getan haben. –

+0

Ich denke, Sie wollen "bind" verwenden: setTimeout (this.bind (this, abc), 1000) –

Antwort

1

setTimeout() ist keine Ajax-Funktion, und es muss eine Funktionsgriff in Form einer Zeichenfolge übergeben werden, ich ziemlich sicher bin. Warum verwenden Sie nicht jQuery, da Sie sich im ersten Codeblock befinden? Wenn man Code schreibt, der jQuery verwendet, ist es üblich, `$` am Anfang eines Variablennamens zu verwenden, um anzuzeigen, dass er ein jQuery-Objekt enthält.

function sendRequest(abc) 
{ 
    $.get('loadfunc.php?abc='+abc,function(r) 
    { 
     $('#ReloadThis3').html(r); 
     setTimeout(function(){sendRequest(abc);},1000); 
    }); 
} 
+0

Sie sind falsch, 'setTimeout()' kann eine Funktion Referenz nehmen. Diese Funktionsreferenz kann entweder der Name einer definierten Funktion oder eine anonyme Funktion sein, je nachdem, ob Argumente übergeben werden sollen oder nicht. –

+0

Ich benutze nie jquery .. Ich versuche, Ihren Beispielcode arbeiten zu lassen, aber es nicht .. außerdem könnte ich in Ihrem Beispiel eine Variable an sendRequest als sendRequest (abc) übergeben? – Tiutto

+1

Nun, wir alle lernen jeden Tag etwas Neues, nicht wahr? Ich werde es bearbeiten, um zu reflektieren. – teh1