2010-09-06 6 views
0

J'avais asked a question sur les objets référents dans une fonction qui est dans jquery chaque fonction mais cette première fonction est définie avant dans un tableau.Référence des objets dans jQuery

Dans ma question tout s'est bien passé (parce que je testais avec un seul élément), quand j'ai mis 2 éléments, ça n'a pas fonctionné, c'est appeler le premier toujours.

Je pense que c'est parce que ajax est assyncrone.

Quelqu'un peut-il me donner une lumière?

Le code est:

var $d=null; 
var configs={ 
    general:{ 
    selector:'div.MicrodualAdGet', 
    max_ads:6}, 
    logs:{ 
    selector:'div#MicrodualAdGet-debug'}, 
    connection:{ 
    type:'POST', 
    url:'http://www.microdual.com/api/microdualgetad', 
    cache:false, 
    timeout:20000, 
    dataType:'json', 
    data:{ 
     adget_id:null, 
     client_action:null}, 
    error:function(r,s,e){MicrodualAdGet_Log("Ajax-Error: "+s+"\n");}, 
    success: null 
    } 
}; 
function MicrodualAdGet_Log(msg){$(configs.logs.selector).append(msg);} 
function MicrodualAdGet_View(d,s){ 
    if(! d) { 
    MicrodualAdGet_Log("MicrodualAdGet-Error: Couldn't contact server correctly\n"); 
    $d.replaceWith("MicrodualAdGet Error: Couldn't contact server correctly"); 
    }else{ 
    if(d.hackattemp.status){ 
     MicrodualAdGet_Log("MicrodualAdGet-Hackattemp-Error: "+d.hackattemp.id+"\n"); 
     $d.replaceWith("MicrodualAdGet Hackattemp Error: "+d.hackattemp.id); 
    }else{ 
     var content=''; 
     $d.css({ 
     display: 'block', 
     position: 'relative', 
     width: d.tamanhos[d.adpost.id_tamanho].width, 
     height: d.tamanhos[d.adpost.id_tamanho].height, 
     overflow: 'hidden', 
     top: '0px', 
     left: '0px', 
     background: '#000000' 
     }) 
     if(d.tipos[d.adpost.id_tipo].nome_tipo=='text') content=d.adpost.content; 
     if(d.tipos[d.adpost.id_tipo].nome_tipo=='image') content='<a href="'+d.adpost.link+'" target="_blank"><img src="'+d.adpost.content+'" width="'+d.tamanhos[d.adpost.id_tamanho].width+'" height="'+d.tamanhos[d.adpost.id_tamanho].height+'" border="0" /></a>'; 
     if(content=='') content='MicrodualAdGet Error: Unable to determine ad type. Please contact our <a href="mailto:[email protected]">Network Administrator</a>'; 
     $d.replaceWith(content); 
    } 
    } 
} 



configs.connection.success = MicrodualAdGet_View; 
configs.connection.data.client_action = "view"; 
$(configs.general.selector).each(function(){ 
    $d=$(this); 
    configs.connection.data.adget_id=$(this).attr("rel"); 
    $.ajax(configs.connection); 
}); 

Merci à l'avance, José Moreira

+2

Toujours inclure votre code dans votre question réelle, pas comme un lien. StackOverflow est conçu pour être autonome; d'autres ressources peuvent disparaître, changer de chemin, etc., etc. Vous pouvez également inclure un lien *, mais assurez-vous que le code apparaît bien dans votre question. –

+0

Merci ... corrigé, voir ma question – CuSS

Répondre

0

fixe, ajouté async:false au tableau config.connection ...

var $d=null; 
var configs={ 
    general:{ 
    selector:'div.MicrodualAdGet', 
    max_ads:6}, 
    logs:{ 
    selector:'div#MicrodualAdGet-debug'}, 
    connection:{ 
    type:'POST', 
    url:'http://www.microdual.com/api/microdualgetad', 
    cache:false, 
    async:false, 
    timeout:20000, 
    dataType:'json', 
    data:{ 
     adget_id:null, 
     client_action:null}, 
    error:function(r,s,e){MicrodualAdGet_Log("Ajax-Error: "+s+"\n");}, 
    success: null 
    } 
}; 
function MicrodualAdGet_Log(msg){$(configs.logs.selector).append(msg);} 
function MicrodualAdGet_View(d,s){ 
    if(! d) { 
    MicrodualAdGet_Log("MicrodualAdGet-Error: Couldn't contact server correctly\n"); 
    $d.replaceWith("MicrodualAdGet Error: Couldn't contact server correctly"); 
    }else{ 
    if(d.hackattemp.status){ 
     MicrodualAdGet_Log("MicrodualAdGet-Hackattemp-Error: "+d.hackattemp.id+"\n"); 
     $d.replaceWith("MicrodualAdGet Hackattemp Error: "+d.hackattemp.id); 
    }else{ 
     var content=''; 
     $d.css({ 
     display: 'block', 
     position: 'relative', 
     width: d.tamanhos[d.adpost.id_tamanho].width, 
     height: d.tamanhos[d.adpost.id_tamanho].height, 
     overflow: 'hidden', 
     top: '0px', 
     left: '0px', 
     background: '#000000' 
     }) 
     if(d.tipos[d.adpost.id_tipo].nome_tipo=='text') content=d.adpost.content; 
     if(d.tipos[d.adpost.id_tipo].nome_tipo=='image') content='<a href="'+d.adpost.link+'" target="_blank"><img src="'+d.adpost.content+'" width="'+d.tamanhos[d.adpost.id_tamanho].width+'" height="'+d.tamanhos[d.adpost.id_tamanho].height+'" border="0" /></a>'; 
     if(content=='') content='MicrodualAdGet Error: Unable to determine ad type. Please contact our <a href="mailto:[email protected]">Network Administrator</a>'; 
     $d.replaceWith(content); 
    } 
    } 
} 



configs.connection.success = MicrodualAdGet_View; 
configs.connection.data.client_action = "view"; 
$(configs.general.selector).each(function(){ 
    $d=$(this); 
    configs.connection.data.adget_id=$(this).attr("rel"); 
    $.ajax(configs.connection); 
}); 

Merci à tous ..

Questions connexes