jQuery $ .ajax请求在Internet Explorer中收到错误的响应

时间:2012-09-12 09:02:46

标签: php jquery json internet-explorer opencart

我遇到了ajax json请求和Internet Explorer的问题。 具体来说,ajax请求行为不正确 我正在使用:
OpenCart 1.5.3.1
jQuery的1.7.1.min.js
jQuery的UI,1.8.16.custom.min.js
Internet Explorer 9
PHP 5.2.9

这是请求函数:

    function addToCart(product_id, quantity, option_id, option_value) {
        quantity = typeof(quantity) != 'undefined' ? quantity : 1;
        option_value = typeof(option_value) != 'undefined' ? option_value : 0;
        option_id = typeof(option_id) != 'undefined' ? option_id : 0;
        jQuery.ajax({
            url: 'index.php?route=checkout/cart/add',
            type: 'post',
            cache: false,
            data: 'product_id=' + product_id + '&quantity=' + quantity + '&option_id=' + option_id + '&option_value=' + option_value+'&rnd=' + Math.random(),
            dataType: 'json',
            success: function(jsonObj) {
                $('.success, .warning, .attention, .information, .error').remove();

                if (jsonObj['redirect']) {
                    location = jsonObj['redirect'];
                }

                if (jsonObj['success']) {
                    $('#notification').html('<div class="success" style="display: none;">' + jsonObj['success'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');

                    $('.success').fadeIn('slow');

                    $('#cart-total').html(jsonObj['total']);

                    $('html, body').animate({ scrollTop: 0 }, 'slow'); 
                }   
            }
        });
    }

PHP函数返回:

{"success":"Added to cart!","total":"1 product(s) - 52,48\u043b\u0432."}  

这一切在Chrome,FF等都运行良好,但在IE中失败。

实际上,IE并未触发“成功”事件 我能得到回应的唯一方法是通过错误处理程序 然后json对象的status = 200,statusText = OK

这是在Chrome中触发成功事件后的json对象:

jsonObj: Object
success: "Added to cart!"
total: "1 product(s) - 52.48лв."
__proto__: Object  

使用'成功'和'总'值。

这是在Internet Explorer中处理错误事件后的json对象:
Internet Explorer 9 developer tools screenshot

responseText是一个包含当前页面html源的字符串。

我尝试使用jQuery.ajaxSetup({cache: false});但结果是一样的。

有人有这个问题吗?或任何提示?
我没有更多的想法。

3 个答案:

答案 0 :(得分:2)

尝试使用url: 'index.php?route=checkout/cart/add'

的绝对网址

问题是您的响应是html或xml(我看到xml页面的开始标记(名称空间标记),后跟换行符后跟(旧)html起始标记)。

jQuery期待json。所以这是一个解析错误导致错误回调,预示着成功。

确保后端发送正确的信息并且被叫页面是正确的。您可以使用网络选项卡捕获调用以查找问题。

答案 1 :(得分:2)

我使用

来实现所有mod的工作方式
$('base').attr('href')

使用代码,因此代码的ajax将是(小的)

    option_value = typeof(option_value) != 'undefined' ? option_value : 0;
    option_id = typeof(option_id) != 'undefined' ? option_id : 0;
    var base = jQuery('base').attr('href');
    jQuery.ajax({
        url: base + 'index.php?route=checkout/cart/add',
        type: 'post',

这样做的好处是始终是一个完整的URL,无论您使用HTTP还是HTTPS,它都可以正常工作

答案 2 :(得分:0)

我不喜欢Jay Gilford在这里提供的每次加载都会执行不必​​要的东西。请改用:

if ($.browser.msie) {
    $.ajaxPrefilter(function (options, originalOptions, jqXHR) {
        options.url = $('base').attr('href') + options.url;
    });
}