在我的注册过程结束时,您会进入一个支付屏幕,您可以在其中输入优惠券代码,并且有一个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还没有返回它的结果呢?有什么方法可以测试吗?
答案 0 :(得分:0)
问题解决了。
问题是PHP返回了一个XML文档,并且行数据!=“error”对于xml文档无效,因为对象不能等于字符串。我改变了php来为所有情况返回XML,并改变了jQuery以不同的方式读取它,现在它工作得很漂亮。谢谢大家帮我说说。