• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Viele Ajax request - async:false - mit timeout realisieren

Um das mal zu veranschaulichen

Hi :)

habe es jetzt mal versucht nach Deinem Beispiel umzubauen und es hat geklappt!
Hier der umgebaute Code:
PHP:
$(function() {
	$("#check_nsusa").bind("click", function() {
		$("#check_nsusa").attr('src', './images/status2.gif');
		var listusa = $('img.check_nsusa').toArray();
		getNextUsa(listusa);
	});
});

function getNextUsa(listusa){
	if(listusa.length){
		var next = listusa.shift();
		var val = next.id;
	    var valu = val.substr(1);
	    var valtd = 'tdu' + valu;
		$.ajax('./check_ns_usa.php', {
			data: {search: valu},
			timeout: 20000,
			beforeSend: function(){
	            $('#'+val).attr('src', './images/status2.gif');
	            $('#'+valtd).attr('bgcolor', '#f2f26f');
	        },
			success: function(data){
	            if(data == "9") {
		              $('#'+val).attr('src', './images/status_bad.png');
		              $('#'+val).attr('class', 'ready');
		              $('#'+valtd).attr('bgcolor', '#ff7979');
		            } 
		            else if(data == "2") {
		            	$('#'+val).attr('src', './images/status_verygood.png');
		            	$('#'+val).attr('class', 'ready');
		            	$('#'+valtd).attr('bgcolor', '#73cf73');
		            } 
		            else if(data == "1") {
		              $('#'+val).attr('src', './images/status_good.png');
		              $('#'+val).attr('class', 'ready');
		              $('#'+valtd).attr('bgcolor', '#73cf73');
		            } 
		            else {
		              $('#'+val).attr('src', './images/status_unknown.png');
		              $('#'+valtd).attr('bgcolor', '#f2f26f');
		            }
					getNextUsa(listusa);
		    },
			error: function(a, b){
				$('#'+val).attr('src', './images/status_unknown.png');
		        $('#'+valtd).attr('bgcolor', '#f2f26f');
				getNextUsa(listusa);
			},
	        complete: function(jqXHR, exception, message) {
		            if (exception == 'error')  {
		              $('#'+val).attr('src', './images/status_unknown.png');
		              $('#'+valtd).attr('bgcolor', '#f2f26f');
		            }
		    }
		});
	}
	else {
		$("#check_nsusa").attr('src', './images/tick.png');
	}
}

Jetzt hätte ich nur noch 2 Fragen...

1. Wie kann man die Funktion im Fehlerfall noch einmal starten lassen
2. Wie kann man diese Schleife dann nach 10 mal beenden und zun nächsten springen?

Ich würde einen val fehleranzahl erstellen und diesen dann im Fehlerfall hochzählen und mitübergeben?!?!
Nur wie kann ich die Funktion mit dem gleichen Wert im case error: wieder aufrufen?

Vielen Dank
Andre
 
In etwa so (ungetestet)
PHP:
function getNextUsa(listusa){
    var fehler = 0;
    if(listusa.length){
		var next = listusa.shift();
		Request(next, function(date) {
			success(data);
			getNextUsa(listusa);
		}, fehler
    }
    else {
        $("#check_nsusa").attr('src', './images/tick.png');
    }
}

function Request(next, success, fehler){
	var val = next.id;
	var valu = val.substr(1);
	var valtd = 'tdu' + valu;
	$.ajax('./check_ns_usa.php', {
		data: {search: valu},
		timeout: 20000,
		beforeSend: function(){
			$('#'+val).attr('src', './images/status2.gif');
			$('#'+valtd).attr('bgcolor', '#f2f26f');
		},
		success: success,
		error: function(){
			$('#'+val).attr('src', './images/status_unknown.png');
			$('#'+valtd).attr('bgcolor', '#f2f26f');
			if(fehler < 10) Request(next, success, fehler + 1);
			else success(0);
		}
	});
}
 
In etwa so (ungetestet)

Jep das sieht sehr gut aus :) Habe noch ein wenig was umgebaut, da die main Liste nicht wieder übergeben wurde...

Aber habe sehr viel gelernt in den letzten beiden Tagen über ajax Requests und auch über die Foren Netiquette! Vielen vielen Dank an alle!
Besonders an "ein schlauer", der mich sehr gut in die Materie eingearbeitet hat. Werde hier mal jetzt häufiger vorbeischauen und vielleicht kann ich ja dem einen oder anderen im Bereich PHP helfen :)

hier der jetzt fertige Code. Er entspricht genau dem was ich mir anfangs vorgestellt hatte:

1. Request werden sync hintereinander abgefragt
2. Im Fehlerfall wird bis 10 mal versucht eine Antwort zu erhalten
3. Wenn vorgegebenes Timeout erreicht wird zählt dies als Fehlerfall und es wird erneut versucht bis Limit von 10 erreicht ist

PHP:
$(function() {
	$("#check_nsusa").bind("click", function() {
		$("#check_nsusa").attr('src', './images/status2.gif');
		var listusa = $('img.check_nsusa').toArray();
		getNextUsa(listusa);
	});
});

function getNextUsa(listusa){
    var fehler = 0;
    if(listusa.length){
        var next = listusa.shift();
        RequestUsa(next, function(data) {
            success(data);
            getNextUsa(listusa);
        },fehler,listusa);
    }
    else {
        $("#check_nsusa").attr('src', './images/tick.png');
    }
}

function RequestUsa(next, success, fehler,listusa){
    var val = next.id;
    var valu = val.substr(1);
    var valtd = 'tdu' + valu;
    $.ajax('./check_ns_usa.php', {
        data: {search: valu},
        timeout: 20000,
        beforeSend: function(){
            $('#'+val).attr('src', './images/status2.gif');
            $('#'+valtd).attr('bgcolor', '#f2f26f');
        },
        success: function(success){
            if(success == "9") {
	              $('#'+val).attr('src', './images/status_bad.png');
	              $('#'+val).attr('class', 'ready');
	              $('#'+valtd).attr('bgcolor', '#ff7979');
	            } 
	            else if(success == "2") {
	            	$('#'+val).attr('src', './images/status_verygood.png');
	            	$('#'+val).attr('class', 'ready');
	            	$('#'+valtd).attr('bgcolor', '#73cf73');
	            } 
	            else if(success == "1") {
	              $('#'+val).attr('src', './images/status_good.png');
	              $('#'+val).attr('class', 'ready');
	              $('#'+valtd).attr('bgcolor', '#73cf73');
	            } 
	            else {
	              $('#'+val).attr('src', './images/status_unknown.png');
	              $('#'+valtd).attr('bgcolor', '#f2f26f');
	            }
				getNextUsa(listusa);
	    },
        error: function(){
            $('#'+val).attr('src', './images/status_unknown.png');
            $('#'+valtd).attr('bgcolor', '#f2f26f');
            if(fehler < 10) RequestUsa(next, success, fehler + 1,listusa);
            else success(9);
        }
    });
}

Ich weis nicht ob man ein Thema hier "closen" kann aber wenn das jemand machen kann dann tut es :)
 
Zurück
Oben