Internet Explorer ajax-запрос ничего не возвращает - PullRequest
0 голосов
/ 15 апреля 2010

В конце моего процесса регистрации вы попадаете на экран оплаты, где вы можете ввести код купона, и есть вызов 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 голосов
/ 15 апреля 2010

Проблема решена.

Проблема заключалась в том, что PHP возвращал XML-документ, а строка data! = "Error" была недопустима для XML-документа, поскольку объект не может быть равен строке. Я изменил php, чтобы он возвращал XML для всех случаев, и изменил jQuery, чтобы он читался по-другому, и теперь он работает прекрасно. Спасибо всем за помощь в обсуждении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...