2009-09-14 4 views
0

Votre aide serait grandement appréciée. Je ne comprends pas pourquoi le code jQuery suivant ne fonctionne pas:Comment puis-je obtenir un accès en écriture aux objets externes à partir d'une méthode de rappel jQuery AJAX?

function saveChanges(obj, n, id) { 

    var t = "content to send to server"; 

    $.post("http://localhost:8080/Content.do?method=update",{ 
    value: t, 
    key: id 
    },function(result){ 
    alert(result); //WORKS 
    alert("INNER"+$(obj).parent().parent().html());//WORKS 
    $(obj).parent().parent().after('<div>dddddd</div>').remove();//FAILS ALL 
    alert(id); //FAILS 
    alert("stop"); //FAILS 
    }); 

} 

Ma conclusion à ce jour est: dans cette méthode de rappel function(result) Je n'ai lu accès à l'objet extérieur (ici $(obj)) mais je n'ai pas écrire accès. Dès que j'écris, la fonction échoue à partir de ce moment-là pour le reste de la fonction.

Cette conclusion est-elle correcte? Si quelqu'un connaît un bon tutoriel qui explique ce concept, je serais reconnaissant. (Accès aux objets avec jQuery et leurs champs d'application ...)

merci beaucoup

+0

Votre conclusion est erronée. Montrer un exemple de votre structure HTML. Et expliquez, en détail, ce que vous entendez par "FAILS" ... – Shog9

+0

Bonjour, faute de moyens, l'alerte() n'est pas appelée (= la boîte d'alerte n'est pas affichée dans le navigateur ...) –

Répondre

0

Il y a autre chose qui ne va pas. Dans un cas de test isolé, je ne pouvais pas dupliquer votre erreur

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html lang="en"> 
<head> 
<title>test</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script> 
<script type="text/javascript"> 

//alert = console.log; 

$(function(){ 

    function saveChanges(obj, n, id) { 

    var t = "content to send to server"; 

    $.post("test.php",{ 
     value: t, 
     key: id 
    },function(result){ 
     alert(result); //WORKS 
     alert("INNER"+$(obj).parent().parent().html()); 
     $(obj).parent().parent().after('<div>dddddd</div>').remove(); 
     alert(id); 
     alert("stop"); 
    }); 

    } 

    saveChanges('#test', 1, 'test'); 

}); 


</script> 

</head> 
<body> 

<div> 
    <div> 
     <div id="test"> 
      just a test 
     </div> 
    </div> 
</div> 

</body> 
</html> 

Et mon test.php

<?php 

echo json_encode($_POST); 

?> 

Je reçois quatre alertes

{"value":"content to send to server","key":"test"} 

INNER 
    <div> 
     <div id="test"> 
      just a test 
     </div> 
    </div> 

test 

stop 
+0

merci pour votre réponse. Eh bien, j'ai beaucoup de code otehr à l'intérieur de cette méthode et démontré par votre réponse, il semble qu'il doit y avoir quelque chose d'erroné. J'ai fait beaucoup de débogage (mais seulement en utilisant des alertes) et à chaque fois que j'écrivais sur l'objet, la méthode a été annulée. Je suis arrivé à cette conclusion ... Les alertes –

+0

sont un très mauvais moyen de déboguer. Non seulement ils sont inadéquats et généralement ennuyeux, mais ils peuvent aussi introduire des erreurs et des biais que votre script ne pourrait pas afficher en l'absence de ces alertes. Passez aux commandes de la console dans Firebug (vous pouvez même voir dans le code ci-dessus que, quand je l'ai testé, j'ai remappé 'alert()' sur 'console.log()' de Firebug, mais je l'ai commenté ici). –

+0

De même, pour l'enregistrement concernant les variables, il n'y a pas d'accès séparé "lecture" et "écriture". Soit la variable est disponible dans la portée actuelle, soit elle ne l'est pas. –

0

Il a certainement rien à voir avec la lecture ou l'écriture « à » une variable. Quelque chose d'autre doit se passer sur la première ligne que vous avez marquée comme "FAIL". Vous devriez vérifier ceci en activant Firebug dans Firefox (si Firebug n'est pas installé, abandonnez tout et faites-le maintenant) et exécutez à nouveau le script.

+0

Bonjour Philippe, Merci pour votre réponse. Si mon hypothèse est fausse que je sais que je dois en outre déboguer cela. J'ai passé beaucoup de temps à essayer de trouver l'erreur en utilisant des instructions "d'alerte" pour le débogage mais je n'ai pas réussi ... (J'ai installé Firebug ... mais je ne l'ai pas encore utilisé donc il est temps de l'apprendre maintenant ... –

Questions connexes