À 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?
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? –
Vous avez raison, l'erreur était ailleurs. Édité. –
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. –