2011-01-10 3 views
0

J'utilise jQuery AJAX pour récupérer des données d'une page PHP et utiliser une image GIF de chargement dans l'espace réservé pour indiquer à l'utilisateur que les résultats sont en cours.Problème étrange AJQ jQuery

$(".project").change(function(){ 
      $(".custName").html("<img src='/admin/images/ajax-loader.gif' />"); 
      $(".projectDesc").html("<img src='/admin/images/ajax-loader.gif' />"); 
      var project_num=$(this).val(); 
      var dataString = 'project='+ project_num; 

       $.ajax 
        ({ 
         type: "POST", 
         url: "customerfilter.php", 
         dataType: "json", 
         data: dataString, 
         cache: false, 
         success: function(data) 
         { 
          $(".custName").html(data.message1); 
          $(".projectDesc").html(data.message2); 
         } 
        }); 


     }); 

Lorsque je clique sur le déclencheur et d'ouvrir la console Firebug je peux voir le POST aller et revenir et les données sont correctes. Cependant le gif de chargement ne disparaît jamais et n'est jamais remplacé par les données correctes - aucune idée pourquoi?

C'est une capture d'écran de Firebug et la fenêtre RÉPONSE:

alt text

PHP Relative:

while ($row = mysql_fetch_array($result)) { 
       echo json_encode(array(
        "message1" => $row['cust_name'], 
        "message2" => $row['description'], 
       )); 

$ result est un mysql_query

+0

nous montrent les données qui revient et peut-être le php qui le génère. – jondavidjohn

+0

Vérifiez si le rappel 'succès' fonctionne. Mettez un console.log dans par exemple. Lorsque la réponse n'est pas valide json, le rappel n'est pas appelé correctement. –

+1

Avez-vous utilisé un débogueur pour parcourir le rappel de "réussite"? – Pointy

Répondre

5

Cette réponse n'est pas un JSON valide. Essayez ceci:


$output = Array(); 
while ($row = mysql_fetch_array($result)) { 
       $output[] = Array(
        "message1" => $row['cust_name'], 
        "message2" => $row['description'], 
       ); 
} 
echo json_encode($output); 

EDIT: En outre, vous devez changer votre « succès » javascript rappel aussi:


success: function(data) { 
    $(".custName, .projectDesc").empty(); 
    for(var x in data) { 
    $(".custName").append(data[x].message1); 
    $(".projectDesc").append(data[x].message2); 
    } 
} 
+0

+1 - C'est presque certainement le problème/la solution. –

+0

Le rappel 'succès' fonctionne maintenant? –

+0

excuses, puisque vous avez ajouté le jQuery ... parfait! Merci beaucoup – benhowdle89

1

J'ai rencontré des problèmes similaires lors de la définition du type à JSON. Si le PHP ne renvoie pas 100% JSON correct, alors jQuery n'exécutera pas la fonction success.

Donc, essayez ceci:

  1. Mettez une déclaration console.log("success was called") à l'intérieur de la méthode success afin que vous puissiez voir quand il est appelé.

  2. Assurez-vous que votre code PHP crée correctement JSON en utilisant la fonction json_encode.

  3. Poster toute nouvelle information que vous avez afin que nous puissions continuer à vous aider à déboguer :-)