Internet Explorer ajax请求不返回任何内容

时间:2010-04-14 22:11:54

标签: php jquery ajax internet-explorer

在我的注册过程结束时,您会进入一个支付屏幕,您可以在其中输入优惠券代码,并且有一个AJAX调用,它从数据库中取出优惠券并将其返回到页面,以便它可以应用于您的在提交给paypal之前的总数。它在Firefox,Chrome和Safari中运行良好,但在Internet Explorer中,没有任何反应。返回到jQuery函数的(数据)似乎为空。

jQuery Post

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

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";
}

当我在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还没有返回它的结果呢?有什么方法可以测试吗?

1 个答案:

答案 0 :(得分:0)

问题解决了。

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