2010-04-14 6 views
0

À la fin de mon processus d'inscription vous arrivez à un écran de paiement où vous pouvez entrer un code promo, et il y a un appel AJAX qui récupère le coupon de la base de données et le renvoie à la page donc il peut être appliqué à votre total avant qu'il ne soit soumis à paypal. Cela fonctionne très bien dans Firefox, Chrome et Safari, mais dans Internet Explorer, rien ne se passe. Le (données) retourné à la fonction jQuery semble être nul.Internet Explorer ajax demande ne rien retourner

jQuery Poster

function applyPromo() { 
var enteredCode = $("#promoCode").val(); 
$(".promoDiscountContainer").css("display", "block"); 
$(".promoDiscount").html("<img src='/images/loading.gif' alt='Loading...' title='Loading...' height='18' width='18' />"); 
$.post("/ajax/lookup-promo.php", { promoCode : enteredCode }, 
    function(data){ 
     if (data != "error") { 
      var promoType = data.getElementsByTagName('promoType').item(0).childNodes.item(0).data; 
      var promoAmount = data.getElementsByTagName('promoAmount').item(0).childNodes.item(0).data; 
      $(".promoDiscountContainer").css("display", "block"); 
      $(".totalWithPromoContainer").css("display", "block"); 
      if (promoType == "percent") { 
       $("#promoDiscount").html("-" + promoAmount + "%"); 
       var newPrice = (originalPrice - (originalPrice * (promoAmount/100))); 
       $("#totalWithPromo").html(" $" + newPrice); 
       if (promoAmount == 100) { 
        skipPayment(); 
       } 
      } 
      else { 
       $("#promoDiscount").html("-$" + promoAmount); 
       var newPrice = originalPrice - promoAmount; 
       $("#totalWithPromo").html(" $" + newPrice); 
      } 
      $("#paypalPrice").val(newPrice + ".00"); 
      $("#promoConfirm").css("display", "none"); 
      $("#promoConfirm").html("Promotion Found"); 
      finalPrice = newPrice; 
     } 
     else { 
      $(".promoDiscountContainer").css("display", "none"); 
      $(".totalWithPromoContainer").css("display", "none"); 
      $("#promoDiscount").html(""); 
      $("#totalWithPromo").html(""); 
      $("#paypalPrice").val(originalPrice + ".00"); 
      $("#promoConfirm").css("display", "block"); 
      $("#promoConfirm").html("Promotion Not Found"); 
      finalPrice = originalPrice; 
     } 
    }, "xml"); 

}

PHP correspondant page

include '../includes/dbConn.php'; 

$enteredCode = $_POST['promoCode']; 

$result = mysql_query("SELECT * FROM promotion WHERE promo_code = '" . $enteredCode . "' LIMIT 1"); 

$currPromo = mysql_fetch_array($result); 

if ($currPromo) { 
    if ($currPromo['percent_off'] != "") { 
     header("content-type:application/xml;charset=utf-8"); 
     echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"; 
     echo "<promo>"; 
     echo "<promoType>percent</promoType>"; 
     echo "<promoAmount>" . $currPromo['percent_off'] . "</promoAmount>"; 
     echo "</promo>"; 
    } 
    else if ($currPromo['fixed_off'] != "") { 
     header("content-type:application/xml;charset=utf-8"); 
     echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"; 
     echo "<promo>"; 
     echo "<promoType>fixed</promoType>"; 
     echo "<promoAmount>" . $currPromo['fixed_off'] . "</promoAmount>"; 
     echo "</promo>"; 
    } 
} 
else { 
    echo "error"; 
} 

Quand je lance le code dans IE, je reçois une erreur javascript sur la ligne Javascript que dit

var promoType = data.getElementsByTagName('promoType').item(0).childNodes.item(0).data; 

Voici une capture d'écran du débogueur IE alt text http://img697.imageshack.us/img697/52/screenshot20100414at622.png

Mise à jour

Je mis un point d'arrêt sur la ligne, et il rencontre en fait l'erreur sur cette ligne:

if (data != "error") { 

CEPENDANT , quand je lui permets d'exécuter le reste du code après le point d'arrêt, ça marche. Je pense que peut-être IE exécute la fonction de rappel avant que la requête ajax est réellement terminée, donc le PHP n'a pas encore retourné ses résultats? Est-ce que je peux tester ça?

+0

C'est bizarre, 'data' est sûrement un nom défini (même si rien n'a été passé quand la fonction a été appelée) parce que c'est un argument de la fonction. Êtes-vous sûr que l'erreur est sur cette ligne? –

+0

Vous avez raison, l'erreur était ailleurs. Édité. –

+0

IE a une console JS, n'est-ce pas? Arrêtez l'exécution sur la ligne problématique en utilisant un point d'arrêt et exécutez la ligne en ajoutant un appel de méthode à la fois jusqu'à ce que vous trouviez celui qui échoue. –

Répondre

0

Problème résolu. Le problème était que le PHP retournait un document XML, et les données de ligne! = "Error" n'étaient pas valides pour un document XML, car un objet ne peut pas être égal à une chaîne. J'ai changé le php pour renvoyer le XML pour tous les cas, et changé le jQuery pour le lire différemment et maintenant il fonctionne magnifiquement. Merci à tous pour m'avoir aidé à en parler.