即接收相同的ajax响应

时间:2012-03-06 16:04:25

标签: jquery

我有一个在你输入时过滤的ajax搜索。它在chrome和firefox中运行良好。但是,无论您发送什么数据,IE总是返回相同的响应。这是为什么?以下是代码:

var cardSearch = $('<div>').addClass('card_search').appendTo($('body')).hide().css({'position': 'absolute', 'width': '350px', 'height': '300px', 'background': '#D5D5D5', 'padding': '10px'}).append(
    $('<div>').css({'background': 'whiteSmoke', 'padding': '5px', 'height': '290px', 'position': 'relative'}).append(
        $('<input>').css('width', '250px').bind('keyup', function(e){
            $.post('http://api.redemptionconnect.com/cards/find/?a=' + Math.random(), {data: {title: $(this).val(), limit: 10, page: 1}}, function(r){
                $('ul', cardSearch).empty();
                for( var i = 0; i < r.data[0].length; i++ )
                    $('ul', cardSearch).append(
                        $('<li>').append(
                            $('<a>').attr('href', 'javascript:void(0)').html(r.data[0][i].Card.title + ' (' + r.data[0][i].CardSet.abbreviation + ')').attr('card_id', r.data[0][i].Card.id).mouseover(function(){showCardTooltip(this);})
                        ).css({'padding': '5px', 'border-bottom': '1px solid #ccc'})
                    );
            }, 'json'); 
        }),
        $('<button>').html('Search').css({'width': '70px', 'margin-left': '10px'}),
        $('<hr>').css('margin-bottom', 0),
        $('<ul>').css({
            'list-style-type': 'none',
            'margin': 0,
            'padding': 0,
            'width': '100%'
        })
    )
);

在chrome和firefox中,输出是正确的。在IE中,无论您键入什么,输出始终都是相同的。我不确定还包括什么。您可以在http://redforum.blackfireweb.com看到它正常工作,然后点击“搜索卡”菜单按钮。

2 个答案:

答案 0 :(得分:4)

对于AJAX请求缓存,IE可能非常苛刻。如果你在jQuery的.ajax对象中设置cache:false,它会将自己的缓存破坏查询字符串附加到url:

$.ajax({ cache: false })

在$ .post()上方添加此内容,然后删除自己的内容,看看是否有所作为。

答案 1 :(得分:1)

使用timestamp-ticks代替random

来试用您的代码
$.post('http://api.redemptionconnect.com/cards/find/?a=' + new Date().getTime(),

new Date().getTime()替换为+new Date

,您可以缩短时间
$.post('http://api.redemptionconnect.com/cards/find/?a=' + (+new Date)...

建议:$.ajax({ cache: false })等于我的但是详细,请阅读docs

cacheBoolean

  

默认值:true,false表示dataType'script'和'jsonp'如果设置为   false,它会强制请求的页面不被浏览器缓存   将缓存设置为false也会附加查询字符串参数,   “_ = [TIMESTAMP]”,到网址。