2010-04-26 7 views
0

J'ai des difficultés à faire fonctionner correctement une fonction AJAX/JSON. J'ai eu cette fonction saisissant la valeur d'une boîte déroulante, mais maintenant je veux utiliser une balise d'ancrage pour définir sa valeur.Problème JSON onFailure

Je pensais qu'il serait facile d'utiliser simplement l'événement onClick pour passer une chaîne à la fonction que j'utilisais pour la liste déroulante mais j'obtiens l'alerte dans l'événement JSON onFailure même si les données sont ajoutées à MySQL. J'ai essayé de supprimer l'alerte de onFailure événement, mais il n'ajoute pas les données. Le menu déroulant continue à fonctionner correctement, aucune alerte. (Je dois souligner que la suppression de l'alerte a aussi brisé ma liste déroulante)

1er ajouter un événement onClick ...

<a href="<?php echo Settings::get('app.webroot'); ?>?view=schedule&action=questions" onmouseout="MM_swapImgRestore();" onmouseover="MM_swapImage('bre','','template/images/schedule/bre_f2.gif',1)" onclick="assignCallType('testing')";> 

2 Je vérifie main.js.php

function assignCallType(type) { 
    alert(type); 
    new Request.JSON({ 
     url: "ajax.php", 
     onSuccess: 
      function(rtndata,txt){ 
       if (rtndata['STATUS'] != 'OK') 
        alert('Status was not okay'); 
      }, 
     onFailure : 
      function() { 
      alert("onFailure") 
      } 
    }).get({ 
     'action': 'assignCallType', 
     'call_type': type 
    });  
} 

3ème Ajax .php: la variable est de retour en PHP et les valeurs sont ajoutés à MySQL, mais je reçois l'alerte en cas JSON onFailure

if ($_GET['action'] == "assignCallType") { 
    if ($USER->isInsideSales()) { 
     $call_type = $_GET['call_type']; 
     $_SESSION['callinfo']->setCallType($call_type); 
     $_SESSION['callinfo']->save($callid); 
     echo json_encode(array('STATUS'=>'OK')); 
    } else { 
     echo json_encode(array('STATUS'=>'DENIED')); 
    } 
} 

Toute idée où je me trompe. La seule différence entre ceci et le déroulant fonctionnant est comment la fonction a été appelée, j'ai utilisé onchange="assignCallType(this.value)".

Répondre

0

Le rappel pour onFailure fournit-il des arguments? Par exemple, dans jQuery, il y a 3 arguments qui peuvent vous donner des informations sur l'erreur. J'ai rencontré un problème similaire où le rappel error continuait à être appelé même s'il n'y avait pas d'erreur de connexion. Le problème s'est avéré être JSON mal formé. Pouvez-vous confirmer que votre JSON est bien formé?

MISE À JOUR

Je viens de vérifier la documentation Request et a remarqué que onFailure peut avoir xhr dans sa signature. Essayez de jeter un œil aux attributs status, statusText et responseText de l'objet XMLHttpRequest. Cela vous donnera une idée de ce qui ne va pas.

Essayez ceci:

onFailure: function(xhr) { 
    console.log(xhr.status, xhr.statusText, xhr.responseText); 
} 
+0

Je pense que votre droit - mais je ne comprends pas l'erreur avec le menu déroulant ... même si je laisse de côté onFailure tous ensemble, je n'ajoute pas les données à mySQL, désolé, je ne comprends pas assez Mootools pour vérifier l'objet XMLHttpRequest. – Mikey1980

+0

même si j'ai surFailure faire n'importe quoi mais une alerte il n'ajoute pas de données ... l'homme je suis confus. – Mikey1980

+1

Essayez de remplacer le gestionnaire onFailure par ce que j'ai indiqué ci-dessus dans ma réponse. –