2010-04-14 36 views
0

在我的注册过程结束时,您会进入付款屏幕,您可以在其中输入优惠券代码,并且有一个AJAX调用,它从数据库中提取优惠券并将其返回给页面因此它可以在提交给PayPal之前应用于您的总计。它在Firefox,Chrome和Safari中运行良好,但在Internet Explorer中没有任何反应。返回给jQuery函数的(数据)显示为空。Internet Explorer ajax请求不返回任何东西

jQuery的帖子

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页面

​​

当我运行在IE浏览器的代码,我得到的Javascript行一个JavaScript错误说

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

这里的IE调试alt text http://img697.imageshack.us/img697/52/screenshot20100414at622.png

更新

我设置就行了断点的截图,它实际上遇到错误在这条线:

if (data != "error") { 

无论其,当我允许它在断点后运行代码的其余部分时,它就可以工作。我在想,也许IE在ajax请求实际完成之前运行回调函数,所以PHP还没有返回结果呢?有什么方法可以测试吗?

+0

很奇怪,'data'确实是一个定义的名字(即使函数被调用时没有传入任何东西),因为它是该函数的一个参数。你确定错误在那条线上吗? – 2010-04-14 22:16:23

+0

你是对的,错误是在别的地方。编辑。 – 2010-04-14 22:25:46

+0

IE有一个JS控制台,不是吗?使用断点停止有问题的行上的执行,并且一次添加一个方法调用来运行该行,直到找出哪一个失败。 – 2010-04-14 22:27:12

回答

0

问题已解决。

问题在于PHP正在返回一个XML文档,并且行数据!=“error”对于xml文档无效,因为对象不能等于字符串。我改变了PHP的所有情况下返回XML,并改变了jQuery以不同的方式读取它,现在它运行的很好。感谢大家帮我说出来。