2010-08-09 8 views
0

Je ne sais pas pourquoi j'ai du mal avec ça, mais il est temps que je me lève pour l'air et pose la question. Quelle est la meilleure façon d'appeler un fichier php avec jquery ajax, de traiter certaines entrées via $ _GET, de renvoyer ces résultats et d'utiliser à nouveau ajax pour remplacer le contenu d'un div? Jusqu'à présent, je peux appeler le fichier php, et dans le succès de l'appel ajax jquery, je reçois une alerte du texte.Obtenir les résultats php avec jquery ajax

$.ajax({ 
     url: "xxx/xxx.php", 
     type: "GET", 
     data: data,  
     cache: false, 
     success: function (html) { 
      alert("HTLM = " + html); 
      $('#product-list').html(html); 
      } 
}); 

je régler la fonction php pour faire écho le résultat, l'alerte recrache le code html du fichier php. Mais j'ai un effet secondaire. Je reçois le code généré par le php en haut de la page. Donc php fait son travail (en faisant écho au contenu). Next jquery fait son travail en remplaçant le contenu de la div par les valeurs du fichier php. Comment puis-je empêcher le fichier php de faire écho au contenu en haut de la page?

Exemple de code étant repris de php et alerté dans le succès de jquery ajax

HTML =

<div class="quarter"> 
    <div class="thumb"> 
    <a href="productinfo.php?prod-code=Y-32Z&cat=bw&sub="> 
     <img src="products/thumbs/no_thumb.gif" alt="No Image" border="0" /> 
    </a> 
    </div> 
    <div class="labels"><span class="new-label">New</span></div> 
    <p><span class="prod-name">32OZ YARD</span></p> 
    <p><span class="prod-code">Y-32Z</span></p> 
</div> 

Merci !!!

-Kris

+0

pourrait vous fournir un échantillon du balisage qui est en cours de retour? – Ender

+0

J'ai ajouté un balisage qui est en alerte dans le succès de l'ajax jquery. –

+0

Tout ce que vous faites écho dans le fichier php sera pompé par Jquery. Si vous ne voulez pas qu'il revienne à Jquery vous ne pouvez pas l'écho sur la page php. – Luke

Répondre

4

Vous incluez votre fichier php que vous utilisez pour votre appel ajax en haut de la page? Si oui, vous n'avez pas besoin de le faire. Cela provoquerait le dumping des données en haut.

Posez votre question :)

EDIT pour répondre à la question

<div id="product-list"> 
<?php include 'products.php' ?> 
</div> 

Votre fonction ajax va maintenant écraser le contenu de php quand il fonctionne et les sorties à # produit Liste

+0

Si j'utilise jquery ajax pour appeler le fichier php et obtenir le contenu, une fois la jquery terminée, si je vois la source, le contenu n'est pas dans la vue source. C'est là sur la page, mais pas quand vous regardez la source. Quand j'exécute un simulateur d'araignée, il ne montre pas le contenu. Est-ce la façon dont jquery ajax fonctionne ou existe-t-il un autre moyen de le faire? –

+0

Aucun jquery/javascript modifie la page une fois qu'elle est en ligne, les araignées n'ont pas javascript activé donc ne peuvent pas ramasser le contenu. Pourquoi avez-vous besoin de jquery pour inclure le contenu, ne pouvez-vous pas simplement utiliser php? Si quelqu'un consultait votre site sans javascript activé (si vous n'incluez pas le fichier php), il ne pourra pas afficher vos produits. – Luke

+0

Comment inclure le fichier afin de pouvoir exécuter la charge de contenu initiale, mais ne pas inclure quand j'ai besoin de faire écho pour le jquery + ajax? Je ne voulais pas faire un fichier séparé. –

0

Si vous voulez dire vous voulez éviter d'afficher les balises d'en-tête et de corps, juste le contenu, vous devez détecter lorsque la demande est AJAX au côté PHP.

Certains pseudo-code est:

IF (!IS_AJAX) 
    HTML 
    HEADER 
    BODY 
ENDIF 

CONTENTS 

IF (!IS_AJAX) 
    /BODY 
    /HTML 
ENDIF 

Rechercher HTTP_X_REQUESTED_WITH ici à stackoverflow

+0

HTTP_X_REQUESTED_WITH n'est pas toujours disponible dans le tableau $ _SERVER – sunwukung

+0

Je ne le savais pas, mais j'ajouterais une variable pour récupérer du contenu AJAx. Ainsi, la recherche de l'en-tête donné serait étroitement liée –

0

Votre question n'est pas tout à fait claire, mais il semble que vous voulez seulement utiliser une partie des données de réponse. Si c'est le cas, alors il y a 2 façons de s'y prendre:

D'abord, vous pouvez vérifier le côté PHP s'il est demandé via AJAX.C'est la solution que je l'utilise, car il empêche les données inutiles transférées au client:

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); 
... 
if(!IS_AJAX) { 
    // anything here will NOT be sent in response to ajax requests 
}

Vous pouvez également marquer la partie des données de réponse que vous souhaitez utiliser avec une carte d'identité, puis recherchez le retour données pour cet ID:

 
<h1>Don't care about this</h1> 
<div id="use_this">This is the useful data.</div>

Ensuite, pour votre rappel de réponse ajax:

success = function(data) { 
    data = $(data).find('#use_this'); 
    // do whatever 
} 
+0

Non Je veux toutes les données de réponse. Je reçois la réponse écho en haut de la page, ainsi que le contenu chargé dans un div avec jquery. –