Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 25
  1. #1
    IT Format ist offline Jungspund
    registriert
    11-06-2013
    Beiträge
    12

    Lightbulb Viele Ajax request - async:false - mit timeout realisieren

    Hallo an alle,

    Ich habe ein Problem mit sync ajax aufrufen die, bei Bedarf, mit einem Timeout beendet werden müssen.
    Das Script das ich da geschrieben habe funktioniert soweit gut und das timeout fasst auch sobald ich async auf true setze. Da der Server den ich abfrage aber nur eine Abfrage gleichzeitig annehmen kann bin ich auf async: false angewiesen.

    Gibt es einen work around der es mir erlaubt das auch mit false zu benutzen?

    Aufgabenstelleung ist folgende:
    In einem XML File sind zwischen 10 und 2000 Artikelanfragen. nachdem das XML File hochgeladen wurde und die Artikel herausgefiltert sind wird eine Tabelle mit allen Artikeln angezeigt.
    Nun gibt es verschiedene Warenwirtschaften wo ich diese Artikel jetzt anfragen muss, daher gib es nun z.B 3 spalten mit Warenwirtschaft1 - 3.

    Wenn ich nun bei Warenwirtschaft1 auf start drücke, soll er ein php file auf dem selben server aufrufen welches den Artikelchck vornimmt. Der Rückgabewert wird ausgewertet und entsprechend entweder ein grüner oder roter Punkt, oder wenn die Abfrage in ein timeout kommt ein Fragezeichen.

    Da die Warenwirtschaft die ich anfragen muss in Amerika ist und der Server nur max 1 anfrage zur gleichen Zeit annimmt, muss ich schon mal sync abfragen. Da aber auch von Zeit zu Zeit ein timeout kommt, hängt sich das script leider immer auf.

    Vielleicht gibt es ja wen hier der mir da ein wenig auf die Sprünge helfen könnte. Ich habe so ziemlich alles was ich mir vorstellen konnte schon in Google eingetippt.

    Wie schon gesagt das script läuft gut und geht jeweils einen Eintrag nach dem anderen durch, leider funktioniert das timeout bei sync abfrage nicht!

    zu guterletzt noch einmal das Script in der bisherigen Form:
    hier das Beispiel für die amerikanische Version:
    PHP-Code:
    $(function() {
        $(
    "#check_nsusa").bind("click", function() {
            $(
    "#check_nsusa").attr('src''./images/status.gif');
            var 
    fetching = $.when();
            $(
    "img.check_nsusa").each(function (i) {
                var 
    val = $(this).attr('id');
                var 
    valu = $(this).attr('ids');
                var 
    responseData;
                
    fetching fetching.pipe(function (jqXHRexceptionmessage) {
                    $.
    ajax({
                        
    url'./check_ns_usa.php?search=' valu,
                        
    timeout15000,
                        
    asyncfalse,
                        
    beforeSend: function(){
                            $(
    '#'+val).attr('src''./images/status2.gif');
                        },
                        
    success: function(json){
                            if(
    json == "9") {
                                $(
    '#'+val).attr('src''./images/status_bad.png');
                            } 
                            else if(
    json == "2") {
                                $(
    '#'+val).attr('src''./images/status_verygood.png');
                            } 
                            else if(
    json == "1") {
                                $(
    '#'+val).attr('src''./images/status_good.png');
                            } 
                            else {
                                $(
    '#'+val).attr('src''./images/status_unknown.png');
                            }
                            
    responseData json;
                        },
                        
    error: function(jqXHRexceptionmessage) {
                        },
                        
    complete: function(jqXHRexceptionmessage) {
                            if (
    exception == 'error')  {
                                $(
    '#'+val).attr('src''./images/status_unknown.png');
                            }
                        }
                    })
                    .
    done(function ( data ) {
                        
                    });
                });
            });
            
    fetching.done(function (jqXHRexceptionmessage) {
                $(
    "#check_nsusa").attr('src''./images/tick.png');
            });
        });
    }); 
    object.png
    Geändert von IT Format (11-06-2013 um 14:39 Uhr)

  2. #2
    s4ty Guest

    AW: Viele Ajax request - async:false - mit timeout realisieren

    leider funktioniert das timeout bei sync abfrage nicht!
    Das äußert sich wie?

  3. #3
    s4ty Guest

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Schon mal mit einer Rekursion versucht?
    PHP-Code:
    $(function() {
      $(
    "#check_nsusa").bind("click", function() {
        $(
    "#check_nsusa").attr('src''./images/status.gif');
        var 
    fetching = $.when();
        $(
    "img.check_nsusa").each(function (i) {
          var 
    val = $(this).attr('id');
          var 
    valu = $(this).attr('ids');
          var 
    responseData;
          
    fetching fetching.pipe(function (jqXHRexceptionmessage) {
            var 
    ajaxCall = $.ajax({
              
    url'./check_ns_usa.php?search=' valu,
              
    asyncfalse,
              
    beforeSend: function(){
                $(
    '#'+val).attr('src''./images/status2.gif');
              },
              
    success: function(json){
                if(
    json == "9") {
                  $(
    '#'+val).attr('src''./images/status_bad.png');
                } 
                else if(
    json == "2") {
                  $(
    '#'+val).attr('src''./images/status_verygood.png');
                } 
                else if(
    json == "1") {
                  $(
    '#'+val).attr('src''./images/status_good.png');
                } 
                else {
                  $(
    '#'+val).attr('src''./images/status_unknown.png');
                }
                
    responseData json;
              },
              
    error: function(jqXHRexceptionmessage) {
                
    setTimeOut(ajaxCall5000);
              },
              
    complete: function(jqXHRexceptionmessage) {
                if (
    exception == 'error')  {
                  $(
    '#'+val).attr('src''./images/status_unknown.png');
                }
              }
            })
            .
    done(function ( data ) {
              
            });
          });
        });
        
    fetching.done(function (jqXHRexceptionmessage) {
          $(
    "#check_nsusa").attr('src''./images/tick.png');
        });
      });
    }); 

  4. #4
    IT Format ist offline Jungspund
    registriert
    11-06-2013
    Beiträge
    12

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Nach langem suchen fand ich das in der todo list von ajax....

  5. #5
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Zitat Zitat von IT Format Beitrag anzeigen
    Ich habe ein Problem mit sync ajax aufrufen die, bei Bedarf, mit einem Timeout beendet werden müssen.
    Das Script das ich da geschrieben habe funktioniert soweit gut und das timeout fasst auch sobald ich async auf true setze. Da der Server den ich abfrage aber nur eine Abfrage gleichzeitig annehmen kann bin ich auf async: false angewiesen.
    Wieso? Du kannst auch asynchrone Abfrage so gestalten, dass immer nur eine ausgeführt wird.

  6. #6
    s4ty Guest

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Zitat Zitat von IT Format Beitrag anzeigen
    Nach langem suchen fand ich das in der todo list von ajax....
    Auf was beziehst du dich?

  7. #7
    IT Format ist offline Jungspund
    registriert
    11-06-2013
    Beiträge
    12

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Zitat Zitat von s4ty Beitrag anzeigen
    Das äußert sich wie?
    Nach langem suchen fand ich das in der todo list von ajax....
    bei async:false wird timeout nicht gewertet...

  8. #8
    IT Format ist offline Jungspund
    registriert
    11-06-2013
    Beiträge
    12

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Zitat Zitat von s4ty Beitrag anzeigen
    Schon mal mit einer Rekursion versucht?
    nein nicht wirklich, ich Programmiere seit Jahren PHP und habe von Ajax etc recht wenig Ahnung...

    Ich habe gerade einmal die Funktion mit setTimeOut(ajaxCall, 5000); erweitert...
    Wahrscheinlich muss ich diese Funktion auch noch definieren?!

    Sobald ich keine Antwort von Server bekomme gibt das Script:

    "NetworkError: 500 Internal Server Error - http://webseite.bsp/check_ns_usa.php?search=92Y5557"

    Mein Firefox FireBug hat folgendes in der Konsole stehen:
    undefined error Internal Server Error in testusa2.php (Zeile 55) // das ist der Aufruf der PHP Datei check_ns_usa.php ...
    ReferenceError: setTimeOut is not defined

  9. #9
    IT Format ist offline Jungspund
    registriert
    11-06-2013
    Beiträge
    12

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Zitat Zitat von ein schlauer Beitrag anzeigen
    Wieso? Du kannst auch asynchrone Abfrage so gestalten, dass immer nur eine ausgeführt wird.
    Hmm das wäre natürlich auch sehr fein. Habe mir das Script in Tagen Arbeit mit viel google Sucherei so zusammengeschrieben. Bin leider kein Experte in JS und ajax...

    Anfangs konnte ich das noch alles mit PHP machen... nur als dann Anfragen mit 1000+ Artikeln kamen wurde die Laufzeit zu hoch. Dann bin ich angefangen mit jq und ajax zu experimentieren.
    Das script läuft ja auch gut... nur wenn der Abzufragende Server nicht antwortet hängt sich alles auf. Das muss ich noch abfangen. Wenn du da auch noch einen Tip hättest wie ich das mit async:true hinbekomme.... sehr gerne

  10. #10
    s4ty Guest

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Zitat Zitat von IT Format Beitrag anzeigen
    nein nicht wirklich, ich Programmiere seit Jahren PHP und habe von Ajax etc recht wenig Ahnung...

    Ich habe gerade einmal die Funktion mit setTimeOut(ajaxCall, 5000); erweitert...
    Wahrscheinlich muss ich diese Funktion auch noch definieren?!

    Sobald ich keine Antwort von Server bekomme gibt das Script:

    "NetworkError: 500 Internal Server Error - http://webseite.bsp/check_ns_usa.php?search=92Y5557"

    Mein Firefox FireBug hat folgendes in der Konsole stehen:
    undefined error Internal Server Error in testusa2.php (Zeile 55) // das ist der Aufruf der PHP Datei check_ns_usa.php ...
    ReferenceError: setTimeOut is not defined

    Die Funktion wird doch definiert var ajaxCall = $.ajax({...

    Und bei setTimOut ist mir ein Fehler unterlaufen, es heißt natürlich setTimeout

  11. #11
    IT Format ist offline Jungspund
    registriert
    11-06-2013
    Beiträge
    12

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Zitat Zitat von s4ty Beitrag anzeigen
    Die Funktion wird doch definiert var ajaxCall = $.ajax({...

    Und bei setTimOut ist mir ein Fehler unterlaufen, es heißt natürlich setTimeout
    Ok soweit habe ich das geändert...

    und hatte noch nen kleinen Fehler drin!

    Jetzt läuft es wunderbar durch Danke dir

    Gibt es denn jetzt noch eine Möglichkeit die Laufzeit des Scriptes zu beeinflussen?
    z.B. das er nach 15 sekunden zum nächsten übergeht? Ist nicht lebensnotwendig, wäre aber noch etwas schicker dann ?
    Geändert von IT Format (11-06-2013 um 15:32 Uhr)

  12. #12
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Das macht die ganze sache ja eher noch schlimmer, da bei einem Fehler einfach der gleich Aufruf nochmal gestartet werden soll. Was ja gar ncith das Problem war. Ausserdem sind setTimeout keine Rekursiven Aufrufe! Rekursion ist, wenn eine Funktion sich selbst aufruft, was mit Timeout nie passieren kann

    Dein Problem ist, dass du alle Ajax Aufrufe gleichzeitig machst, in der .each() Schleife. du darfst aber immer nur einen machen (laut deinen Vorgaben) und dann erst den nächsten, dafür bietet sich das success Event des Ajax Objekt an. Da du das ganze nicht in einer Schleife machen kannst, musst du dir den Selektor als Array zurück geben und dann immer ein Element z.b. mit shift() holen.

  13. #13
    IT Format ist offline Jungspund
    registriert
    11-06-2013
    Beiträge
    12

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Zitat Zitat von ein schlauer Beitrag anzeigen
    Das macht die ganze sache ja eher noch schlimmer, da bei einem Fehler einfach der gleich Aufruf nochmal gestartet werden soll. Was ja gar ncith das Problem war. Ausserdem sind setTimeout keine Rekursiven Aufrufe! Rekursion ist, wenn eine Funktion sich selbst aufruft, was mit Timeout nie passieren kann

    Dein Problem ist, dass du alle Ajax Aufrufe gleichzeitig machst, in der .each() Schleife. du darfst aber immer nur einen machen (laut deinen Vorgaben) und dann erst den nächsten, dafür bietet sich das success Event des Ajax Objekt an. Da du das ganze nicht in einer Schleife machen kannst, musst du dir den Selektor als Array zurück geben und dann immer ein Element z.b. mit shift() holen.
    Das mit der Rekursion hatte ich auch nicht wirklich erkannt... wollte aber nicht näher darauf eingehen da das script ja mit dem Umbau sehr gut funktioniert.
    Es geht Zeile für Zeile durch und liefert mir den gewünschten Rückgabewert, oder wenn der Server mal kurz nicht erreichbar ist übergeht er den Fehler und springt zum nächsten.

    Da ich mich bisher zu wenig mit java script ajax etc auseinandergesetzt habe werde ich gerne einmal auch deinen Lösungsansatz veruschen zu bauen.
    Kann ich mit deiner Methode realisieren das ich

    - alle Artikel einzelnd nacheinander abrufe
    - in der Lage bin einen zulangen Request vorzeitig zu beenden (15 Sekunden)
    - einen vorzeitig beendeten oder abgebrochenen Wert neu zu starten. (10 Wiederholungen)
    - nach 10 Versuchen soll der dann endgültig beendet werden und der nächste Artikel geprüft werden

    Das wäre das goldene Ei wo ich hinmöchte.
    Wäre das mit der Methode zu machen?
    Da müsste dann doch auch die Rekrusion eine Rolle spielen bei den 10 Wiederholungen...

    Was wäre der richtige Ansatz? Da in den Posts oben weiter auch davon gesprochen wurde das mit async:true zu machen, wäre es da möglich die Werte nacheinander anzufragen?

    Was macht am meisten Sinn ???

    Danke für eure Hilfe!!!

  14. #14
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Ja das würde alles gehen, bei einer asychronen AJAX Bearbeitung. Jetzt ist es so, dass der Browser während der Abfrage komplett blockiert wird.

  15. #15
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Viele Ajax request - async:false - mit timeout realisieren

    Um das mal zu veranschaulichen
    HTML-Code:
    <div id="hole">
    <div id="a"></div>
    <div id="b"></div>
    <div id="c"></div>
    </div>
        <script type="text/javascript" >
          $(document).ready(function() {
    		  var list = $('#hole div').toArray();
    		  getNext(list);
          });
          function getNext(list){
    		  if(list.length){
    			  var next = list.shift();
    			  $.ajax('test.php', {
    				   data: {id: next.id},
    				   success: function(data){
    					   $('#'+next.id).html(data);
    					   getNext(list);
    				   },
    				   error: function(a, b){
    					   alert('Fehler: ' + b);
    				   }
    			   });
    		  }else {
    			  alert('fertig');
    		  }
    	  }
        </script>

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. AJAX Shoutbox - zu viele Connections
    Von Maddin007 im Forum JavaScript
    Antworten: 0
    Letzter Beitrag: 17-02-2009, 20:08
  2. Antworten: 8
    Letzter Beitrag: 17-10-2007, 11:29
  3. Ajax / Browser Timeout
    Von alex.maier im Forum JavaScript
    Antworten: 4
    Letzter Beitrag: 03-05-2007, 15:26
  4. self.close, window.TimeOut, http request
    Von sheen im Forum JavaScript
    Antworten: 4
    Letzter Beitrag: 20-10-2006, 10:44
  5. AJAX-Aufruf mit "async" parameter false - Firefox
    Von cromagnon im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 11-10-2006, 16:13

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •