2

我和许多其他人一样遇到了 IE 和缓存的问题。我有一个拍卖网站,当用户点击出价时,会触发此代码

function bid(id){
var end_dateUP=0;

var tupdate=jq("#tupdate"+id).val();

if (tupdate=="lvl1"){
    end_dateUP=20;  
}else if (tupdate=="lvl2"){
    end_dateUP=15;  
}else if (tupdate=="lvl3"){
    end_dateUP=10;  
}else{
    end_dateUP=0;
}

var url = "http://localhost/bid/comet/update-auction.php"; // the script where you handle the form input.
var user_id=<?php echo json_encode($user_id);?>; //here i'm getting id from SESSION
var user_name=<?php echo json_encode($user_name); ?>; //here i'm getting user name from SESSION
jq.ajax({
    type: "POST",
    async: false,
    url: url,
    data: {"auct_id" : id, "user_id" : user_id, "username" : user_name, "end_date" : end_dateUP}, // serializes the form's elements.
    cache:false,
    success: function(data)
    {
        setTimeout('waitForMsg()',100);
        jq("#tupdate"+id).val("");  
        jq('#bid-container'+id).animate({ backgroundColor: "#659ae0" }, 50);
        jq('#bid-container'+id).animate({ backgroundColor: "#FFF" }, 500);

    },
    error: function(xhr, errorString, exception) {
        alert("xhr.status="+xhr.status+" error="+errorString+" exception=|"+exception+"|");
    }
});
}

在 PHP (update-auction.php) 中,我得到了这个发布的 ajax 数据并更新了我的数据库:

$auction_id=$_POST['auct_id'];
$user_id=$_POST['user_id'];
$usr=$_POST['username'];
$enddate=$_POST['end_date'];


//Database update

此代码在 Firefox 或 Chrome 中运行良好。
所以问题是,当我第一次点击出价时,它可以工作,但是当我进入第二页时(下面的代码):

function pageClick(page){
var url = "http://localhost/bid/auctions-ajax"; // the script where you handle the form input.  

jq.ajaxSetup({ cache: false }); //this line before $.ajax!!!
    jq.ajax({
           type: "POST",
           url: url,
           data: {"page" : page}, 
           async:false, //to sem dodal za časovni zamik
           cache: false,
           success: function(data)
           {
             jq("#a_loader").hide();  
             jq("#show-category").html(data); // show response from the php script.              
           },
            error: function(xhr, errorString, exception) {
            alert("xhr.status="+xhr.status+" error="+errorString+" exception=|"+exception+"|");
        }
    });

}

(onClick 触发 ajax 调用并显示第二页)然后function bid(id)停止工作。我已经搜索了解决方案,例如cache:false,添加new Date().time();到 JSON 中的帖子和发布数据,但没有运气。(此外,当我尝试以 JSON 格式发布数据时,我遇到了一些语法错误:Unexpected token < 和解析错误等等)。我只是想用这个工作代码找出最简单的解决方案......有什么想法吗?

4

3 回答 3

2

这解决了我的问题:

$.ajax(url,
{
cache: false,
success: function(){
//do something
}
}
);

“原因是,有些浏览器只要get请求中的请求相同,就会缓存结果。”

例子:

function showBootstrapModalPopup(url, containerId, modalId)
{
        $.ajax(url,
        {
            cache: false,
            success: function (data) {
                //do something
                $('#' + containerId).html(data);

                $('#' + modalId).modal('show');
            }
        }
        );


    //$.ajax({
    //    url: url,
    //    success: function (data) {
    //        $('#' + containerId).html(data);

    //        $('#' + modalId).modal('show');
    //    },
    //    cache: false
    //});
}
于 2017-04-05T08:27:14.973 回答
0

好的,我找到了解决方案。Internet Explorer 的 jquery 动画有问题。我有一些旧的,这导致了问题并且没有完全执行脚本。我必须包括最新<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>的在 IE 中工作。现在效果很好。

于 2013-04-11T13:54:49.603 回答
0

如果您当前正在将点击处理程序绑定到:

$("selector").click(function...);

将其更改为:

$("#show-category").on("click", "selector", function ...);

这是必要的,因为它pageClick()替换了之前具有点击绑定的 DOM 元素。您需要使用在整个页面替换过程中保留的父元素的委托。

于 2013-04-11T00:50:45.467 回答