Hello,
I've been working on a jquery projet (with the lastest stable version of
jquery) that retrieves information using json from a php script that
requests information from an API.
The script lists all the different extensions with a status colomn that
says what it's doing (waiting, searching or result).
The script gets the list of extensions form an input select drop down
that's generated by PHP (this allows me to manage extensions using a
database). It then launches the search for the selected extension and
when the search is finished it launches the search for all the other
extensions.
I need one answer per query but it seems that the ajax success function
is launched more than once which is not what I want, also sometimes it
seems to keep some sort of memory of what the answer was last time (if I
add a sleep function to the php script sometimes it gets the first
answer befor the sleep is over) ...
I've got a php script to check whois servers that replys with either
taken, available or error.
When the whois servers answer quickly there are no visible problems, but
when they are slow the ajax request seems to be launched a second time
and sometimes a third time when they are very slow.
So I might see for example : domain.com, status : available, and then 2
seconds later it will be replaced by domain.com, status : error and
sometimes then replaced by domain.com, status : available.
In order to test this I replaced ".html(" by ".append(" and I can then
see all the different results...
Of course I could check that the html id contains the "searching" text
and if not to not change it's value, but I would like to stop it
launching the search more than once ... !
Is this a bug or an error in my code ? should I try it with an earlier
version of jquery ?
Here is my javascript code :
function CheckWhois() {
$('#domchk').submit(function() {
ls = Array();
$("#dext>option").each(function(i){
i = i+1;
ls[i] = $(this).val();
});
var ndom = $('#ndom').val();
var dext = $('#dext').val();
$("#domresult").html("<table
id=\"domtab\"><tr><th>Sel.</th><th>Domain</th><th>status</th></tr><tr><td
colspan=\"4\">Chose TLD</td></tr><tr class=\"chosen\"><td><input
type=\"checkbox\" name=\"sel\" value=\""+ndom+dext+"\"
/></td><td>"+ndom+dext+"</td><td id=\"chosenstatus\"><img
src=\"images/domload.gif\" alt=\"en cours ...\" /></td></tr><tr><td
colspan=\"4\">Autres Extensions</td></tr></table>");
for ( var e in ls) {
if (dext != ls[e]) {
$("#domtab").append("<tr class=\""+ls[e]+"\"><td><input
type=\"checkbox\" name=\"sel\" value=\""+ndom+ls[e]+"\"
/></td><td>"+ndom+ls[e]+"</td><td id=\"status"+e+"\"><img
src=\"images/domball.gif\" alt=\"waiting ...\" /></td></tr>");
}
}
$.ajax({
url : "scripts/ajaxwhois.php",
type : "POST",
data : "domain="+ndom+"&ext="+dext,
dataType : "json",
error : function (xhr, desc, exception)
{$("#chosenstatus").html("Error"); },
success : function (data) {
if(data.error) {
extd.html("Erreur");
} else {
$("#chosenstatus").html(data.status);
for ( var e in ls) {
var extd = $("#status"+e);
if (dext != ls[e]) {
extd.html("<img
src=\"images/domload.gif\" alt=\"searching ...\" />");
GetWhois(ndom,ls[e],e);
}
}
}
}
});
return false;
});
}
function GetWhois(ndom,ls,e){
$.ajax({
url : "scripts/ajaxwhois.php",
type : "POST",
data : "domain="+ndom+"&ext="+ls+"&num="+e,
dataType : "json",
error : function (xhr, desc, exception) {
$("#status"+e).html("Error");},
success : function (data) {
if(data.error) {
$("#status"+e).html("Error");
} else {
$("#status"+data.num).append(data.status);
}
}
});
}
$(document).ready(function(){
CheckWhois();
});
Thankyou !