2013-03-15 4 views
0

J'ai une fonction javascript qui exécute sur le changement d'un menu déroulant:Je ne comprends pas callbacks AJAX

<script type="text/javascript"> 
     $(function() 
     { 
      // Executes when the status dropdown changes value 
      $('select[name="status_dropdown"]').change(function(event) 
      { 
       var $this = $(event.target); 
       var orderId = $this.closest('tr').children('td:eq(0)').text(); // index 0 refers to the "order_id column" in the table 

       var result = null; 
       var scriptUrl = "ajax_php/update_status.php?order_id=" + orderId + "&status_id=" + this.value; 

       $.ajax(
       { 
        url: scriptUrl, 
        type: 'get', 
        dataType: 'html', 
        async: false, 
        success: function(data) 
        { 
         result = data; 
         alert(result); 
        } 
       }); 
      }); 
     }) 
    </script> 

Je suis en train de faire l'appel d'alerte pour montrer la valeur de retour du code php suivant (ce qui est vrai):

<?php 
     . 
     . 
     . 

     return true; 
    ?> 

L'alerte ne s'affiche pas. Quelqu'un sait pourquoi ???

+1

vérifiez votre console pour toutes les erreurs et ajouter un gestionnaire d'erreur également –

+1

il me semble que votre problème est que vous utilisez un dataType: html qui signifie que votre demande ajax s'attend à ce que les données html lui soient retournées. si html invalide (ou quelque chose qui n'est pas html) est retourné, la fonction de succès ne se déclenchera jamais car techniquement, il n'a pas réussi à recevoir ce qu'il attendait. Ajax est synonyme de javascript asynchrone et xml (plus communément Json de nos jours) et html n'est pas quelque chose que vous devriez envoyer et venir de cette façon. AUSSI j'ai juste noté asynch réglé à faux .. les anges meurent chaque fois que ce drapeau est mis à faux. Pourquoi utiliser ajax alors? – iAmClownShoe

+0

Oh, la chose asynchrone provenait d'un autre post, j'ai maintenant oublié pourquoi je l'ai ajouté: «Je vais enlever ça, merci! Donc vous dites que je dois retourner HTML au lieu d'un simple varialbe? Je devrais faire écho HTML dans le php? – user2170838

Répondre

1

Retour retourne une seule valeur dans le script php - à la sortie à ajax vous devez réellement sortie le résultat à la page, dans ce cas, quelque chose comme echo "true"; ou print("true");

+0

Bon point, – zeroflagL

+0

Mon point est ajax obtient les données en lisant le contenu de la page, pas ce que php renvoie - donc vous n'avez rien publié dans l'appel ajax –

-1

Essayez cette

$(document).ready(function(){ 
    $('select[name="status_dropdown"]').change(function(event) 
     { 
      var $this = $(event.target); 
      var orderId = $this.closest('tr').children('td:eq(0)').text(); // index 0 refers to the "order_id column" in the table 

      var result = null; 
      var scriptUrl = "ajax_php/update_status.php?order_id=" + orderId + "&status_id=" + this.value; 

      $.ajax(
      { 
       url: scriptUrl, 
       type: 'get', 
       dataType: 'html', 
       async: false, 
       success: function(data) 
       { 
        result = data; 
        alert(result); 
       } 
      }); 
     }); 
}); 
+0

ummm ... tout vous l'avez fait emballer dans un document prêt? – iAmClownShoe

2

J'ai essayé votre code avec une autre URL et cela fonctionne bien. Il y a trois cas:

  • ScriptUrl ne se calcule pas correctement et ne pointe pas à votre script PHP
  • votre serveur est en panne
  • vous accédez à une URL non servi dans le même domaine que celui de votre script (politique d'origine)

vous pouvez voir le détail de votre erreur si vous ajoutez un gestionnaire d'erreurs aux paramètres ajax:

error : function(jqXHR, textStatus, errorThrown) { 
    alert(errorThrown); 
} 
+0

Je vais essayer de vérifier les erreurs, merci! – user2170838