J'ai besoin de publier des données sur une page php, puis j'aimerais obtenir le texte d'un certain div qui se trouve dans la réponse, mais je n'arrive pas à configurer les choses correctement. Je ne suis pas trop bon avec jQuery mais je peux généralement comprendre les choses assez rapidement ... Je suis là depuis une minute et j'ai essayé tout ce que j'ai trouvé ... Je pense que je manque juste la bonne combinaison de choses .
$.post("process.php", data , function (response) {
var w = window.open();
$(w.document.body).html(response);
console.log(typeof response); // yeilds string
//create jquery object from the response html
// var $data = $(response); // yeilds Uncaught Error: Syntax error, unrecognized expression: + whole html text
var success = $($.parseHTML(response)).find("#success");
console.log('success');
console.log(success); // see screenshot
console.log(success.text()); // yields nothing
console.log(success.val()); // yields undefined
// if (window.focus) {w.focus()};
},'html');
c'est la sortie de console.log(success);
et la case rouge est ce que je veux de la réponse ...
! [Cette image semble vraiment minuscule ... elle n'était pas si petite quand je l'ai faite. J'espère qu'il est toujours lisible] [1]
et cela fait cela:
var success = $(response).find("#success");
console.log('success');
console.log(success); // yeilds Uncaught Error: Syntax error, unrecognized expression: + whole html text in red
La réponse est ...
<html><head>
<style>
div.totals {
font-family:calibri; font-size:.9em; display:inline-block;
border-width: 2px; border-style: solid; border-color: #FFD324;
background-color: #FAF5D7; color: #514721;
width: 500px;
}
div.error_invalid {
font-family:calibri; font-size:.9em; display:inline-block;
border-width: 2px; border-style: solid; border-color: #9999CC;
background-color: #EEEEFF; color: #7979B8;
}
</style>
</head>
<body>
<div class="totals">Total new rows added: 0 out of 0<br/></div>
<br/><br/>
<div class="totals">Total updated rows: 0 out of 0 <br/></div>
<div id="success">true</div>
</body></html>
Et j'ai essayé de supprimer la partie style et j'ai ajouté les balises html, head et body dans l'espoir que cela aiderait .... ce qui signifie que j'ai les mêmes problèmes si la réponse se compose uniquement des trois divisions.
Remarquez comment tous les éléments sont sur le même nivea? Vous devez utiliser .filter()
pour réduire la sélection actuelle à un seul élément de cette sélection, .find()
examinera à la place les descendants de la sélection actuelle.
var success = $($.parseHTML(response)).filter("#success");
console.log(success); // div#success
J'ai obtenu une page 'html' complète retournée par ajax, mais je n'ai besoin que d'une partie de son contenu, qui est enveloppé par un div et j'ai également besoin d'exécuter le script à l'intérieur de la page 'html'.
$.ajax ({
type: "POST",
url : "contact.php",
data: $("#formContactUs").serialize(),
success: function(msg){
console.log($(msg)); // this would returned as an array
console.log(msg); // return whole html page as string '<html><body>...</body></html>'
$('#id').html($(content).closest('.target-class'));
$('#id').append($(content).closest('script')[0]); // append and execute first script found, when there is more than one script.
}
});
La réponse de @kevin a donné des indications sur les raisons pour lesquelles find () ne fonctionne pas comme prévu, car il ne sélectionne que son descendant mais pas le premier élément considéré. En plus d'utiliser le filtre, $ .closest () fonctionne également si l'élément actuel correspond à ce que vous recherchez. Eh bien, probablement ce post assez similaire à la réponse de @ Kevin, c'est juste pour suggérer une autre réponse alternative et a donné plus de détails qui, espérons-le, clarifieront les choses.